diff --git a/.eslintrc.json b/.eslintrc.json
index 9dee4f8c..b5c1647c 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -40,6 +40,10 @@
"prefer-const": ["error", {
"ignoreReadBeforeAssign": true
}],
+ "quotes": ["error", "single", {
+ "allowTemplateLiterals": true,
+ "avoidEscape": true
+ }],
"semi": ["error", "always"],
"semi-spacing": ["error", {
"before": false,
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 8b2b5344..e7fa5f4b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -6,11 +6,13 @@ on:
paths-ignore:
- 'LICENSE'
- 'README.md'
+ - 'docs'
pull_request:
branches: [ main, dev ]
paths-ignore:
- 'LICENSE'
- 'README.md'
+ - 'docs'
jobs:
test:
diff --git a/README.md b/README.md
index 47e20ae3..115ef074 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,23 @@
# MASK
-The website for the Manga & Anime Society Kharagpur
-## Contributing
+The website for the Manga and Anime Society Kharagpur (currently running in [kgpmask.club](https://kgpmask.club))
-The owner of this repository is @PartMan7, who also runs the server. He's also running the server cost (at the time of writing he's in his final year, but it'll carry on even after graduation).
-All non-trivial changes are done through PULL REQUESTS ONLY. The WebDev Team Head (currently @Goose-Of-War) is responsible for testing and merging all PRs. Feel free to pester them to look at the changes you've prepared.
-
-To create a pull request, navigate to the `dev` branch (clicking on the GitHub client, or `git checkout dev` on the CLI) and create a new branch based on it (`New Branch` button (based on the `dev` branch, again!) on the GitHub client's branches page, or `git checkout -b [branch-name]` on the CLI). Pull requests will _never_ be merged directly to `main`; they will be first merged to `dev` and batches of changes and/or patches will be merged from `dev` to `main` alongside version increments.
-
-To work on templates which require access to credentials using `dev userless` (`du`) mode, check out [this page](/TESTING.md) for some info.
+## Tech Stack
-Changes to the `dev` server are automatically deployed to [https://test.kgpmask.club]. This does not extend to environment configuration changes (eg: docker changes).
+- VPS provider: OVH
+- Backend reverse proxy for port-forwarding: NGINX
+- Containerized deployments: Docker (we aren't using dockerized containers right now)
+- Application language: Node.js
+- App routing: Express.js
+- Page templates: Nunjucks
+- Page styling: SASS
+- Database: MongoDB
+- Database ORM: mongoose
+- Linting: ESLint
+- Testing suite: Mocha
-Ensure that pull requests pass tests (`npm test` for both lint and mocha tests).
+---
## Running the Server
@@ -22,7 +26,7 @@ This server requires Node.js v16.0+ to run, and all tests are performed on v16.
There are multiple ways to run the server. The vast majority of the time, you will be running it in dev mode - the command for this is `npm run dev`. If you wish to run in regular mode, the command is `npm start`. Note that the server run in both cases will be identical - the only difference is that dev mode will automatically refresh changes made to the server code and/or pages, while regular mode will not. In addition, you can add flags to customize the operation of the server. These are:
- `dev` (d): An internal flag that does the same as `npm run dev`, except you lose access to nodemon. Just use `npm run dev` instead.
-- `jsonuser` (t): Runs the server with the user details being defined in `/src/user.json`. **This is in progress.**
+- ~~`jsonuser` (t): Runs the server with the user details being defined in `/src/user.json`.~~ **This is in progress.**
- `local` (l): Uses a local database (mongodb://127.0.0.1/mask) instead of the designated test database. Overwrites all other DB flags.
- `mongoless` (m): Runs the server without a database connection. All database-based pages cannot be loaded. This is a superset of the `userless` flag (ie; a `mongoless` server will also always be `userless`).
- `prod` (p): Connects directly to the production database. Do NOT use this flag lightly; it can break many, many things if you mess up and the testing database should serve your purposes. Cannot be used in conjuction with dev mode, for security reasons.
@@ -50,23 +54,7 @@ Furthermore, for those with access to multiple sets of credentials (the three ex
Note (edited): You can now connect to the database even while on WiFi/LAN without a VPN. The domain name has been whitelisted. The IP address has NOT been whitelisted for direct http/https connections.
-## Guidelines
-
-Tabs for indentation, basic JS style guidelines (check `./eslintrc.json` for the full list). If you have any questions, post 'em in the WebDev channel. If you aren't a member of the society but have queries/reports/suggestions, feel free to use the Issues / Discussions pages on the repository.
-
-## Tech Stack
-
-- VPS provider: OVH
-- Backend reverse proxy for port-forwarding: NGINX
-- Containerized deployments: Docker
-- Application language: Node.js
-- App routing: Express.js
-- Page templates: Nunjucks
-- Page styling: SASS
-- Database: MongoDB
-- Database ORM: mongoose
-- Linting: ESLint
-- Testing suite: Mocha
+---
## Templates
@@ -86,7 +74,8 @@ Additionally, the following blocks may be set:
The default page template is:
-```nunjucks
+
+```jinja
{% extends "_base.njk" %}
{% set thispage = 'navref' %}
@@ -100,7 +89,8 @@ The default page template is:
The default newsletter template is:
-```nunjucks
+
+```jinja
{% extends "_newsletter.njk" %}
{% set pagetitle = 'Month - Issue num' %}
@@ -117,19 +107,103 @@ The default newsletter template is:
Take a look at existing articles for the various classes and where they're used.
-## Credits:
-
-- Parth Mane (Lead)
-- Vidunram A R (Contributor)
-- Nishkal Prakash (Contributor)
-- Venkatsai Mokshith (Contributor)
-- Jai Sachdev (Contributor)
-- Ankan Saha (Contributor)
-- Sahil Patel (Contributor)
-- Soumil Maiti (Contributor)
-- Anjani Kumar (Contributor)
-- Karthikeya Y M (Contributor)
-- Soham Sen (Contributor)
-- Ayush Parmar (Contributor)
-- Saumyadip Nandy (Contributor)
-- Vishesh Gupta (Contributor)
+---
+
+## Routers
+
+
+The Express app's router is set up by `/src/route.js`. The file route.js imports routers from the `/routes` folder. Each router file has the following format:
+
+```js
+const router = require('express').Router();
+// This router is used to configure the app for a specific route
+
+// GET requests
+app.get('/path', (req, res, next) => {
+ // some code
+ return res.renderFile(template, ctx);
+});
+
+// POST requests
+app.post('/path', (req, res, next) => {
+ // some code
+ return res.status(statusCode).send;
+});
+
+/*
+Notes:
+ The next argument is optional in most cases.
+ The functions in the requests can be asynchronous too.
+ You can use other routers as well if needed.
+*/
+
+module.exports = {
+ route: '/path'
+ router;
+}
+```
+
+All routers are imported and used in `route.js` in the `src` folder.
+
+```js
+const routerModules = (await fs.readdir(path.join(__dirname, '../routes'))).filter(file => file.endsWith('.js'));
+routerModules.forEach(module => {
+ const { route, router } = require(`../routes/${module}`);
+ app.use(route, router);
+});
+```
+
+---
+
+## Contributing
+
+The owner of this repository is @PartMan7, who also runs the server. He's also running the server cost (at the time of writing he's in his final year, but it'll carry on even after graduation).
+
+All non-trivial changes are done through PULL REQUESTS ONLY. The WebDev Team Head (currently @Goose-Of-War) is responsible for testing and merging all PRs. Feel free to pester them to look at the changes you've prepared.
+
+To create a pull request, navigate to the `dev` branch (clicking on the GitHub client, or `git checkout dev` on the CLI) and create a new branch based on it (`New Branch` button (based on the `dev` branch, again!) on the GitHub client's branches page, or `git checkout -b [branch-name]` on the CLI). Pull requests will _never_ be merged directly to `main`; they will be first merged to `dev` and batches of changes and/or patches will be merged from `dev` to `main` alongside version increments.
+
+To work on templates which require access to credentials using `dev userless` (`du`) mode, check out [this page](/docs/TESTING.md) for some info.
+
+Changes to the `dev` server are automatically deployed to [test.kgpmask.club](https://test.kgpmask.club). This does not extend to environment configuration changes (eg: docker changes).
+
+Ensure that pull requests pass tests (`npm test` for both lint and mocha tests).
+
+---
+
+## Guidelines
+
+- For any new route, make sure to use a new router file instead of adding to `route.js`
+- Make sure to extend your template from either `_base.njk` or another template (in case of similar pages, like events or newsletters).
+- Make sure the code passes the lint and mocha tests. You can check that by running `npm run test`. The ESLint configuration can be seen in `.eslintrc.json` and tests can be seen in the `test` folder.
+- If you have any questions, post 'em in the WebDev channel.
+- If you aren't a member of the society but have queries/reports/suggestions, feel free to use the [Issues](https://github.com/kgpmask/MASK/issues)/[Discussions](https://github.com/kgpmask/MASK/discussions) pages.
+
+---
+
+## Credits
+
+### Current Contributors
+
+- Vidunram A R (Lead)
+- Nishkal Prakash
+- Jai Sachdev
+- Ankan Saha
+- Sahil Patel
+- Soumil Maiti
+- Dishant Bothra
+
+### Former Contributors
+
+- Parth Mane
+- Anjani Kumar
+- Soham Sen
+- Vishesh Gupta
+- Saumyadip Nandy
+- Venkatsai Mokshith
+- Karthikeya Y M
+- Ayush Parmar
+
+### Open Source Contributors
+
+- Barun Parua
diff --git a/assets/icons/amv.svg b/assets/icons/amv.svg
new file mode 100644
index 00000000..21682d36
--- /dev/null
+++ b/assets/icons/amv.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/assets/icons/amv_2.svg b/assets/icons/amv_2.svg
new file mode 100644
index 00000000..3b521a71
--- /dev/null
+++ b/assets/icons/amv_2.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/amv_3.svg b/assets/icons/amv_3.svg
new file mode 100644
index 00000000..5f63af62
--- /dev/null
+++ b/assets/icons/amv_3.svg
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/icons/design.svg b/assets/icons/design.svg
new file mode 100644
index 00000000..40128c35
--- /dev/null
+++ b/assets/icons/design.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/assets/icons/design_2.svg b/assets/icons/design_2.svg
new file mode 100644
index 00000000..c048ead9
--- /dev/null
+++ b/assets/icons/design_2.svg
@@ -0,0 +1,33 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/newsletter.svg b/assets/icons/newsletter.svg
new file mode 100644
index 00000000..36364b5b
--- /dev/null
+++ b/assets/icons/newsletter.svg
@@ -0,0 +1,36 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/newsletter_2.svg b/assets/icons/newsletter_2.svg
new file mode 100644
index 00000000..9a299392
--- /dev/null
+++ b/assets/icons/newsletter_2.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/quiz.svg b/assets/icons/quiz.svg
new file mode 100644
index 00000000..1164709a
--- /dev/null
+++ b/assets/icons/quiz.svg
@@ -0,0 +1,18 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/webdev.svg b/assets/icons/webdev.svg
new file mode 100644
index 00000000..0d61b92c
--- /dev/null
+++ b/assets/icons/webdev.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/assets/icons/webdev_2.svg b/assets/icons/webdev_2.svg
new file mode 100644
index 00000000..271efe53
--- /dev/null
+++ b/assets/icons/webdev_2.svg
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/webdev_3.svg b/assets/icons/webdev_3.svg
new file mode 100644
index 00000000..11f8c5af
--- /dev/null
+++ b/assets/icons/webdev_3.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/assets/members/21_anwesha.webp b/assets/members/21_anwesha.webp
index 5e2cea5a..4348e94d 100644
Binary files a/assets/members/21_anwesha.webp and b/assets/members/21_anwesha.webp differ
diff --git a/assets/styles/icons.scss b/assets/styles/icons.scss
index 3342c9d0..2d32807a 100644
--- a/assets/styles/icons.scss
+++ b/assets/styles/icons.scss
@@ -11,95 +11,133 @@
}
[class^="icon-"], [class*=" icon-"] {
- font-family: 'icomoon' !important;
- speak: never;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
+ // font-family: 'icomoon' !important;
+ // // speak: never;
+ // font-style: normal;
+ // font-weight: normal;
+ // font-variant: normal;
+ // text-transform: none;
+ // line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
+ // -webkit-font-smoothing: antialiased;
+ // -moz-osx-font-smoothing: grayscale;
-.icon-design:before {
- content: "\e900";
-}
-.icon-newsletter:before {
- content: "\e907";
-}
-.icon-amv:before {
- content: "\e913";
-}
-.icon-webdev:before {
- content: "\ea80";
-}
-.icon-quiz:before {
- content: "☑";
- font-size: 1.3em;
-}
-.icon-music:before {
- content: "\e911";
+ -webkit-mask-size: cover;
+ mask-size: cover;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ mask-repeat: no-repeat;
+ -webkit-mask-repeat: no-repeat;
}
-.icon-design-head:before {
- content: "\e900";
- color: #e8ce3d;
-}
-.icon-newsletter-head:before {
- content: "\e907";
- color: #e8ce3d;
-}
-.icon-amv-head:before {
- content: "\e913";
- color: #e8ce3d;
-}
-.icon-quiz-head:before {
- content: "☑";
- font-size: 1.3em;
- color: #e8ce3d;
+.icon-design {
+ -webkit-mask:url('/assets/icons/design.svg');
+ mask:url('/assets/icons/design.svg');
+ // background-image: url('/assets/icons/DNA.svg');
+ background: white;
+}
+.icon-newsletter {
+ -webkit-mask:url('/assets/icons/newsletter.svg');
+ mask:url('/assets/icons/newsletter.svg');
+ background: white;
+
}
-.icon-webdev-head:before {
- content: "\ea80";
- color: #e8ce3d;
+.icon-amv {
+ -webkit-mask:url('/assets/icons/amv.svg');
+ mask:url('/assets/icons/amv.svg');
+ background: white;
+
}
+.icon-webdev {
+ -webkit-mask:url('/assets/icons/webdev.svg');
+ mask:url('/assets/icons/webdev.svg');
+ background: white;
-.icon-music-head:before {
- content: "\e911";
- color: #e8ce3d;
}
+.icon-quiz {
+ -webkit-mask:url('/assets/icons/quiz.svg');
+ mask:url('/assets/icons/quiz.svg');
+ // font-size: 1.3em;
+ background: white;
-.icon-design-sub:before {
- content: "\e900";
- color: #30b868;
}
-.icon-newsletter-sub:before {
- content: "\e907";
- color: #30b868;
+.icon-music {
+ -webkit-mask:url('/assets/icons/music.svg');
+ mask:url('/assets/icons/music.svg');
+ background: white;
+
}
-.icon-amv-sub:before {
- content: "\e913";
- color: #30b868;
+
+.icon-design-head {
+ -webkit-mask:url('/assets/icons/design.svg');
+ mask:url('/assets/icons/design.svg');
+ background: #e8ce3d;
+}
+.icon-newsletter-head {
+ -webkit-mask:url('/assets/icons/newsletter.svg');
+ mask:url('/assets/icons/newsletter.svg');
+ background: #e8ce3d;
+}
+.icon-amv-head {
+ -webkit-mask:url('/assets/icons/amv.svg');
+ mask:url('/assets/icons/amv.svg');
+ background: #e8ce3d;
+}
+.icon-quiz-head {
+ -webkit-mask:url('/assets/icons/quiz.svg');
+ mask:url('/assets/icons/quiz.svg');
+ // font-size: 1.3em;
+ background: #e8ce3d;
+}
+.icon-webdev-head {
+ -webkit-mask:url('/assets/icons/webdev.svg');
+ mask:url('/assets/icons/webdev.svg');
+ background: #e8ce3d;
}
-.icon-quiz-sub:before {
- content: "☑";
- font-size: 1.3em;
- color: #30b868;
+
+.icon-music-head {
+ -webkit-mask:url('/assets/icons/music.svg');
+ mask:url('/assets/icons/music.svg');
+ background: #e8ce3d;
}
-.icon-webdev-sub:before {
- content: "\ea80";
- color: #30b868;
+
+.icon-design-sub {
+ -webkit-mask:url('/assets/icons/design.svg');
+ mask:url('/assets/icons/design.svg');
+ background: #30b868;
+}
+.icon-newsletter-sub {
+ -webkit-mask:url('/assets/icons/newsletter.svg');
+ mask:url('/assets/icons/newsletter.svg');
+ background: #30b868;
+}
+.icon-amv-sub {
+ -webkit-mask:url('/assets/icons/amv.svg');
+ mask:url('/assets/icons/amv.svg');
+ background: #30b868;
+}
+.icon-quiz-sub {
+ -webkit-mask:url('/assets/icons/quiz.svg');
+ mask:url('/assets/icons/quiz.svg');
+ // font-size: 1.3em;
+ background: #30b868;
+}
+.icon-webdev-sub {
+ -webkit-mask:url('/assets/icons/webdev.svg');
+ mask:url('/assets/icons/webdev.svg');
+ background: #30b868;
}
-.icon-music-sub:before {
- content: "\e911";
- color: #30b868;
+.icon-music-sub {
+ -webkit-mask:url('/assets/icons/music.svg');
+ mask:url('/assets/icons/music.svg');
+ background: #30b868;
}
-.icon-download:before {
+.icon-download {
content: "\e933";
}
-.icon-random:before {
+.icon-random {
content: "\ea30";
-}
\ No newline at end of file
+}
diff --git a/assets/styles/mask.scss b/assets/styles/mask.scss
index d4325d46..7c7eb482 100644
--- a/assets/styles/mask.scss
+++ b/assets/styles/mask.scss
@@ -27,6 +27,8 @@ body {
background: linear-gradient(rgba(0, 0, 0, 0.85), rgba(0, 0, 0, 0.85)), url('/assets/background.jpg');
background-size: cover;
background-position: center;
+ background-repeat: no-repeat;
+ background-attachment: fixed;
text-align: center;
color: var(--light-gray);
font-family: Ubuntu, Roboto, Arial, Open Sans, sans-serif;
diff --git a/database/database.js b/database/database.js
index 22ecd0f7..f775dac3 100644
--- a/database/database.js
+++ b/database/database.js
@@ -1,12 +1,13 @@
const mongoose = require('mongoose');
exports.init = async () => {
+ const prodHosts = [...Array(3)].map((_, i) => `ac-5rrleks-shard-00-0${i}.muhi0zw.mongodb.net`);
if (!process.env.MONGO_URL) return console.log('[!!!] Unable to connect to database: no URL supplied');
try {
const db = await mongoose.connect(process.env.MONGO_URL, { connectTimeoutMS: 5000 });
const socket = db.connections[0];
if (!PARAMS.test) console.log(`Connected to the database at ${socket.host}:${socket.port}`);
- if (socket.host === 'ac-5rrleks-shard-00-01.muhi0zw.mongodb.net' && socket.name === 'mask') {
+ if (prodHosts.includes(socket.host) && socket.name === 'mask') {
if (PARAMS.test) {
console.log('HOLY SHIT WHY ARE YOU CONNECTING TO PROD IN A TEST SUITE AAAAAA');
console.log('*defenestrates to prevent damage*');
diff --git a/database/handler.js b/database/handler.js
index fe8657e3..5d1eb6a0 100644
--- a/database/handler.js
+++ b/database/handler.js
@@ -5,7 +5,7 @@ const Member = require('./schemas/Member');
const Newsletter = require('./schemas/Newsletter');
const Poll = require('./schemas/Poll');
const Post = require('./schemas/Post');
-const { findOne } = require('./schemas/User');
+const Submission = require('./schemas/Submission');
// Handle newly registered user or normal login
async function createNewUser (profile) {
@@ -106,6 +106,26 @@ function getPosts (postType) {
// TODO: Make this accept a number of posts as a cap filter
return Post.find(postType ? { type: postType } : {}).sort({ date: -1 });
}
+async function getPost (id) {
+ return Post.findById(id);
+}
+async function deletePost (link) {
+ const postDeleted = Post.findOneAndDelete({ 'link': link });
+ return postDeleted;
+}
+async function editPost (data) {
+ const updatedPost = Post.findOneAndUpdate({ '_id': data.id }, {
+ 'name': data.name,
+ 'link': data.link,
+ 'type': data.type,
+ 'attr': data.attr,
+ 'date': data.date
+ }, {
+ new: true
+ });
+ // console.log(updatedPost);
+ return updatedPost;
+}
async function addPost (data) {
if (data.page === '') delete data.page;
@@ -114,12 +134,51 @@ async function addPost (data) {
return post.toObject();
}
+async function getPolls () {
+ return Poll.find().lean().sort({ _id: -1 });
+}
+
+async function getPoll (id) {
+ return Poll.findById(id);
+}
+
async function addPoll (data) {
const poll = new Poll(data);
await poll.save();
return poll.toObject();
}
+async function deletePoll (id) {
+ const postDeleted = Poll.findOneAndDelete({ '_id': id });
+ return postDeleted;
+}
+
+async function deletePollOption (data) {
+ const poll = await Poll.findById(data.pollId);
+ const indexToDelete = poll.records.findIndex(record => record._id.toString() === data.optionId);
+ if (indexToDelete !== -1) {
+ poll.records.splice(indexToDelete, 1);
+ }
+ const updatedPoll = await poll.save();
+ return updatedPoll;
+}
+
+async function editPoll (data) {
+ const poll = await Poll.findById(data.id);
+ console.log('hehe', poll);
+ poll.title = data.title;
+ poll.endTime = data.endTime;
+ for (let i = 0; i < poll.records.length; i++) {
+ poll.records[i].value = data.records[i].value;
+ }
+ for (let i = poll.records.length; i < data.records.length; i++) {
+ poll.records.push(data.records[i]);
+ }
+ const updatedPoll = await poll.save();
+ return updatedPoll;
+}
+
+
async function getActivePolls () {
const polls = await Poll.find({ endTime: { '$gt': new Date() } });
// console.log(polls);
@@ -131,8 +190,8 @@ async function getMonthlyPolls (month) {
const polls = await Poll.find(
{
'_id': {
- "$regex": `${date.getFullYear() + "-" + ("0" + (month ? month : date.getMonth() + 1)).slice(-2) + "-"}`,
- "$options": "i"
+ '$regex': `${date.getFullYear() + '-' + ('0' + (month ? month : date.getMonth() + 1)).slice(-2) + '-'}`,
+ '$options': 'i'
}
}
).lean();
@@ -156,7 +215,7 @@ async function updatePoll (ctx) {
}
async function getMembersbyYear (year) {
- const data = await Member.find({ 'records.year': year }).sort('name').lean();
+ const data = await Member.find({ 'records.year': ~~year }).sort('name').lean();
const yearData = [];
const teamsData = require('../src/teams.json');
data.forEach(member => {
@@ -277,7 +336,15 @@ async function exportToNextYear () {
}
}
-
+async function addSubmission (ctx) {
+ const idPrefix = `${new Date().toISOString().slice(0, 8)}`;
+ const _id = `${idPrefix}${(await Submission.find({ _id: { '$regex': '^' + idPrefix } })).length + 1}`;
+ const submission = new Submission({
+ ...ctx,
+ _id
+ });
+ return submission.save();
+}
module.exports = {
@@ -293,14 +360,23 @@ module.exports = {
addLiveResult,
getNewsletter,
getPosts,
+ getPost,
+ deletePost,
+ editPost,
addPost,
- getMembersbyYear,
+ getPoll,
+ getPolls,
addPoll,
+ deletePoll,
+ deletePollOption,
+ editPoll,
+ getMembersbyYear,
getActivePolls,
getMonthlyPolls,
updatePoll,
removeTeam,
getCurrentMembers,
exportToNextYear,
- addTeam
+ addTeam,
+ addSubmission
};
diff --git a/database/schemas/Post.js b/database/schemas/Post.js
index bfcfc5ad..e2e0e82f 100644
--- a/database/schemas/Post.js
+++ b/database/schemas/Post.js
@@ -17,6 +17,6 @@ const postSchema = new mongoose.Schema({
postSchema.set('collection', 'posts');
-postModel = mongoose.model('posts', postSchema);
+postModel = mongoose.model('Post', postSchema);
module.exports = postModel;
diff --git a/database/schemas/Submission.js b/database/schemas/Submission.js
new file mode 100644
index 00000000..2573d909
--- /dev/null
+++ b/database/schemas/Submission.js
@@ -0,0 +1,17 @@
+const mongoose = require('mongoose');
+
+const submissionSchema = new mongoose.Schema({
+ _id: { type: String, required: true },
+ name: { type: String, required: true },
+ email: { type: String, required: true },
+ member: Boolean,
+ type: { type: String, required: true },
+ link: { type: String, required: true },
+ proof: String,
+ social: String,
+ date: { type: Date, default: new Date(), required: true }
+});
+
+submissionSchema.set('collection', 'submissions');
+
+module.exports = mongoose.model('Submission', submissionSchema);
diff --git a/TESTING.md b/docs/TESTING.md
similarity index 93%
rename from TESTING.md
rename to docs/TESTING.md
index 2ad0b356..6c208fa6 100644
--- a/TESTING.md
+++ b/docs/TESTING.md
@@ -1,6 +1,6 @@
-# Tips for working on templates using credentials in `dev userless` mode
+# Tips for working on templates using credentials in `dev userless and mongoless` mode
-As you check `handler.js`, you might come across a few cases which checks for `loggedIn` or `PARAMS`. Generally, the templates which are supposed to be rendered by this cannot be accessed by this in `dev userless` (`du`) mode. Some instances include:
+As you check `handler.js`, you might come across a few cases which checks for `loggedIn` or `PARAMS`. Generally, the templates which are supposed to be rendered by this cannot be accessed by this in `dev userless` or `dev mongoless` (`du` or `dm` respectively) mode. Some instances include:
- Quiz templates (quiz list, quiz login, the actual quiz, quiz attempted, etc)
- Live Quiz templates (participant's interface, quiz master's interface, results page)
- User profile page
@@ -18,4 +18,4 @@ _Alternatively, for some cases, if you go on a treasure hunt through the commits
Hope this helps you out in contributing to the interface of the website. If you have any queries, as mentioned in [README](/README.md), feel free to pester the WebDev team.
-
\ No newline at end of file
+
diff --git a/docs/past_newsletters.md b/docs/past_newsletters.md
new file mode 100644
index 00000000..8ec89a3a
--- /dev/null
+++ b/docs/past_newsletters.md
@@ -0,0 +1,84 @@
+# Past Newsletter Archive (Akashic Records of Articles)
+
+## __**2023-05-1**__
+- Anime News Scan [Gargi Raj]
+- Upcoming Action Anime Review [Mayank Rana]
+- Anime Review: Demon Slayer [Nishkal Prakash]
+- Anime Review: I'm Standing on a Million Lives [Aman Tater]
+- Popular Meme Dialogues over the years: Action Anime [Vidunram A R]
+
+## __**2023-04-1**__
+- Anime Review: My Clueless First Friend [Nikhith Manoj]
+- Anime Review: Daily Life of High School Boys [Nishkal Prakash]
+- Anime Review: The Misfit of the Demon King Academy [Maitra Das]
+- Anime Review: School Babysitters [Aman Tater]
+
+## __**2023-03-1**__
+- Anime Review: Cautious Hero [Nishkal Prakash]
+- Manga Review: In Another World with my Smartphone [Nikhith Manoj]
+- Anime Review: Eminence in Shadow [Abhibhu Prakash]
+- Isekai Recommendations [Divyansh Tripathi]
+- Isekai-Themed Crossword
+
+## __**2023-02-1**__
+- Manga Review: Otonari ni Ginga [Ayush Parmar]
+- Webtoon Review: Yumi's Cells [Gargi Raj]
+- Anime and Manga Review: Shigatsu wa Kimi no Uso [Dillip Dibyajyoti Dash]
+- Mangaka Review: Naoko Takeuchi [Rashmi Patil]
+- Top 10 Romance Anime [Abhibhu Prakash & Vidhu Vikas Singh]
+- Romance-Themed Crossword
+
+## __**2022-12-1**__
+- Anime Review: AO ASHI [Nikhith Manoj]
+- Manhwa Review: SECOND LIFE RANKER [Chiranjeet Mishra]
+- Anime Review: HAJIME NO IPPO [Dillip Dibyajyoti Dash]
+- Light Novel Review: MUSHOKU TENSEI [Nishkal Prakash]
+- Top 10 Popular Action Manhwas [Vidunram A R]
+- Partner-Themed Crossword
+
+## __**2021-10-2**__
+- Manga Review - UZUMAKI [Abhishek Kumar]
+- Horror/Thriller Anime Reviews [Abhibhu Prakash]
+- Review: Tokyo Ghoul [Ankit Chowdhury]
+- Review: Boku Dake ga Inai Machi/Erased (Review) [Vidhu Vikas Singh]
+- Ajin : Demi-human Wordsearch [Arjit Lohia]
+- The Promised Neverland Crossword [Aditya Das]
+
+## __**2021-10-1**__
+- Monster Review [Anmol Kumar]
+- Made in Abyss - Anime/Manga Review [Parth Mane]
+- Parasyte: The Maxim - Review [Anshul Bankar]
+- Psycho Pass - Review [Aditya Sarode]
+- Darwin's Game - Review [Srijan Srivastava]
+- Re:Zero Wordsearch [Sarthak Vijaywat]
+- Death Note Crossword [Parth Mane]
+
+## __**2021-09-2**__
+- Review - Mairimashita! Iruma-Kun (Manga) [Abhishek Kumar]
+- Seasonal Anime Review - Summer 2021 [Abhibhu Prakash]
+- Review: Akagami no Shirayuki-hime [Ankit Chowdhury]
+- Review: No Game No Life [Vidhu Vikas Singh]
+- Recommendation/Review - Black Clover [Aditya Das]
+- Isekai/Fantasy Wordsearch [Anshul Bankar]
+- Shadows Quiz [Anshul Bankar]
+- Isekai Quiz [Arjit Lohia]
+
+## __**2021-09-1**__
+- Review - The Saga of Tanya the Evil [Parth Mane]
+- Review: That Time I Got Reincarnated as a Slime [Sarthak Vijaywat]
+- Review / Recommendation: Kekkai Sensen Blood Blockade Battlefront [Aditya Sarode]
+- Review: KonoSuba: God’s Blessing on This Wonderful World [Bishal Kumar Behera]
+- Review - Kumo Desu Ga, Nani Ka? [Parth Mane]
+- Serial Experiments Lain - An Overview [Anmol Kumar]
+- Tensura Wordsearch [Sarthak Vijaywat]
+- Overlord Crossword [Parth Mane]
+
+## __**2021-08-1**__
+- Review / Recommendation: Berserk (1997) [Ankit Chowdhury]
+- Recommendation: Tower of God [Sarthak Vijaywat]
+- Review: Demon Slayer [Abhishek Kumar]
+- Review / Recommendation: Chivalry of a Failed Knight [Abhibhu Prakash]
+- Review: Dororo [Vidhu Vikas Singh]
+- The Philosophy of Attack on Titan [Anmol Kumar]
+- BnHA Wordsearch [Aditya Das]
+- KnY Crossword [Arjit Lohia]
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
index 10ee7963..470b70d3 100644
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -9,19 +9,18 @@
"version": "3.2.8",
"license": "MPL-2.0",
"dependencies": {
- "axios": "^0.21.1",
- "connect-mongo": "^4.6.0",
+ "axios": "^1.4.0",
+ "connect-mongo": "^5.0.0",
"cookie-parser": "^1.4.6",
"csurf": "^1.11.0",
"express": "^5.0.0-beta.1",
- "express-session": "^1.17.2",
- "mongodb": "^4.8.0",
- "mongoose": "^6.2.4",
- "nunjucks": "^3.2.3",
+ "express-session": "^1.17.3",
+ "mongodb": "^5.6.0",
+ "mongoose": "^7.3.1",
+ "nunjucks": "^3.2.4",
"passport": "^0.6.0",
"passport-google-oauth20": "^2.0.0",
- "sass": "^1.38.1",
- "socket.io": "^4.5.3"
+ "sass": "^1.63.6"
},
"devDependencies": {
"cross-env": "^7.0.3",
@@ -36,6 +35,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz",
"integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^1.11.1"
}
@@ -44,13 +44,15 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@aws-crypto/sha256-browser": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz",
"integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/ie11-detection": "^2.0.0",
"@aws-crypto/sha256-js": "^2.0.0",
@@ -66,13 +68,15 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@aws-crypto/sha256-js": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz",
"integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/util": "^2.0.0",
"@aws-sdk/types": "^3.1.0",
@@ -83,13 +87,15 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@aws-crypto/supports-web-crypto": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz",
"integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^1.11.1"
}
@@ -98,13 +104,15 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@aws-crypto/util": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz",
"integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "^3.110.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
@@ -115,13 +123,15 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@aws-sdk/abort-controller": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.201.0.tgz",
"integrity": "sha512-xJ984k+CKlGjBmvNarzM8Y+b6X4L1Zt0TycQmVBJq7fAr/ju9l13pQIoXR5WlDIW1FkGeVczF5Nu6fN46SCORQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -135,6 +145,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.204.0.tgz",
"integrity": "sha512-uftJkNKYcZ8bXVwcpOn5ZUjUX0IRto0ZrTO8DBdS9b7PJu2Y84eSy46LsAYuRDC0PZreQxy8nOH5HmI86/W8xQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -183,6 +194,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.204.0.tgz",
"integrity": "sha512-AECcNrcAQxV/Jlu8ogshRaYwt2jayx0omQJs/SXj70mWxmbk4MQnb+DqJIpPpOKBHaza/xlC2TKS1RzkiuZxyw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -228,6 +240,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.204.0.tgz",
"integrity": "sha512-Tp6FqENRw31XK5r5hul1JXnQgHBhbbXhoMebyFih6/zjpATaqg0bnV6tpww4yPi3uc+yDGXKw2/tDroSsyTsRA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -277,6 +290,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.201.0.tgz",
"integrity": "sha512-6YLIel7OGMGi+r8XC1A54cQJRIpx/NJ4fBALy44zFpQ+fdJUEmw4daUf1LECmAQiPA2Pr/hD0nBtX+wiiTf5/g==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/signature-v4": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -293,6 +307,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.204.0.tgz",
"integrity": "sha512-DmiGXe7pXWuJiAGphzY5cRaphRiU5DJ6Tcg/88Td3wnj22As5DCELetb7E2YC9DfwmKiWcGAKQaYQqWe5AzSqw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/client-cognito-identity": "3.204.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -308,6 +323,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.201.0.tgz",
"integrity": "sha512-g2MJsowzFhSsIOITUjYp7EzWFeHINjEP526Uf+5z2/p2kxQVwYYWZQK7j+tPE2Bk3MEjGOCmVHbbE7IFj0rNHw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -322,6 +338,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.201.0.tgz",
"integrity": "sha512-i8U2k3/L3iUWJJ1GSlwVBMfLQ2OTUT97E8yJi/xz5GavYuPOsUQWQe4fp7WGQivxh+AqybXAGFUCYub6zfUqag==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/node-config-provider": "3.201.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -338,6 +355,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.204.0.tgz",
"integrity": "sha512-ddtaS0ya5lgZZwfuJ/FuniroreLJ6yDgPAasol/rla9U5EU0qUEK1+6PX463exghUGjYfTqxdrKXhGYZfuEoIw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/credential-provider-env": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -357,6 +375,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.204.0.tgz",
"integrity": "sha512-kGbR5JE90zBGDS4cIz7tlUklMMeOm5oc5ES74YStLUacpQKwzVcHmDG8aT2DCONS/wEYysOIs5LygHurOJ/+Ww==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/credential-provider-env": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -378,6 +397,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.201.0.tgz",
"integrity": "sha512-jTK3HSZgNj/hVrWb0wuF/cPUWSJYoRI/80fnN55o6QLS8WWIgOI8o2PNeVTAT5OrKioSoN4fgKTeUm3DZy3npQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/shared-ini-file-loader": "3.201.0",
@@ -393,6 +413,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.204.0.tgz",
"integrity": "sha512-iS884Gda99x4zmdCK3XxFcceve4wB+wudpeTUm2wwX9AGrSzoUnLWqNXv/R8UAMAsKANaWMBkqv/bsHpsEitZw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/client-sso": "3.204.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -409,6 +430,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.201.0.tgz",
"integrity": "sha512-U54bqhYaClPVZfswgknhlICp3BAtKXpOgHQCUF8cko5xUgbL4lVgd1rC3lWviGFMQAaTIF3QOXyEouemxr3VXw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -423,6 +445,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.204.0.tgz",
"integrity": "sha512-XlVfSWoXAiuQb5Q053McnmqSvllojKAc8ecQiLgLXstXXcHrI36E4XH7VkMaNV8JPPdLQhmLxrj01vzUyoT47Q==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/client-cognito-identity": "3.204.0",
"@aws-sdk/client-sso": "3.204.0",
@@ -449,6 +472,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.204.0.tgz",
"integrity": "sha512-TfIhWYQ4CTjrD+FSuBcKMSVrqq8GCwqCfUyalWmSKo4JIFhN5OxUnOFb1/ecE/TJX+YgZ65w4qhVJVHHmh229Q==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/querystring-builder": "3.201.0",
@@ -462,6 +486,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.201.0.tgz",
"integrity": "sha512-WJsMZg5/TMoWnLM+0NuwLwFzHsi89Bi9J1Dt7JdJHXFLoEZV54FEz1PK/Sq5NOldhVljpXQwWOB2dHA2wxFztg==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"@aws-sdk/util-buffer-from": "3.201.0",
@@ -476,6 +501,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.201.0.tgz",
"integrity": "sha512-f/zgntOfIozNyKSaG9dvHjjBaR3y20kYNswMYkSuCM2NIT5LpyHiiq5I11TwaocatUFcDztWpcsv7vHpIgI5Ig==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -486,6 +512,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz",
"integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -498,6 +525,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.201.0.tgz",
"integrity": "sha512-p4G9AtdrKO8A3Z4RyZiy0isEYwuge7bQRBS7UzcGkcIOhJONq2pcM+gRZYz+NWvfYYNWUg5uODsFQfU8342yKg==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -512,6 +540,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.201.0.tgz",
"integrity": "sha512-F3JlXo5GusbeZR956hA9VxmDxUeg77Xh6o8fveAE2+G4Bjcb1iq9jPNlw6A14vDj3oTKenv2LLnjL2OIfl6hRA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/middleware-serde": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -531,6 +560,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.201.0.tgz",
"integrity": "sha512-7KNzdV7nFcKAoahvgGAlzsOq9FFDsU5h3w2iPtVdJhz6ZRDH/2v6WFeUCji+UNZip36gFfMPivoO8Y5smb5r/A==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -545,6 +575,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.201.0.tgz",
"integrity": "sha512-kYLsa9x3oUJxYU7V5KOO50Kl7b0kk+I4ltkrdarLvvXcVI7ZXmWHzHLT2dkUhj8S0ceVdi0FYHVPJ3GoE8re4A==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -558,6 +589,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.201.0.tgz",
"integrity": "sha512-NGOr+n559ZcJLdFoJR8LNGdrOJFIp2BTuWEDYeicNdNb0bETTXrkzcfT1BRhV9CWqCDmjFvjdrzbhS0cw/UUGA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -572,6 +604,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.201.0.tgz",
"integrity": "sha512-4jQjSKCpSc4oB1X9nNq4FbIAwQrr+mvmUSmg/oe2Llf42Ak1G9gg3rNTtQdfzA/wNMlL4ZFfF5Br+uz06e1hnQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/service-error-classification": "3.201.0",
@@ -589,6 +622,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.201.0.tgz",
"integrity": "sha512-clZuXcoN0mAP4JH5C6pW5+0tdF25+fpFJqE7GNRjjH/NYNk6ImVI0Kq2espEWwVBuaS0/chTDK3b+pK8YOWdhw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/middleware-signing": "3.201.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -606,6 +640,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.201.0.tgz",
"integrity": "sha512-Z7AzIuqEDvsZmp80zeT1oYxsoB8uQZby20Z8kF6/vNoq3sIzaGf/wHeNn0p+Vgo2auGSbZcVUZKoDptQLSLwIQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -619,6 +654,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.201.0.tgz",
"integrity": "sha512-08ri5+mB28tva9RjVIXFcUP5lRTx+Pj8C2HYqF2GL5H3uAo+h3RQ++fEG1uwUMLf7tCEFivcw6SHA1KmCnB7+w==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -636,6 +672,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.201.0.tgz",
"integrity": "sha512-lqHYSBP5FBxzA5w5XiYYYpfXabFzleXonqRkqZts1tapNJ4sOd+itiKG8JoNP7LDOwJ8qxNW/a33/gQeh3wkwQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -648,6 +685,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.201.0.tgz",
"integrity": "sha512-/rYZ93WN1gDJudXis/0382CEoTqRa4qZJA608u2EPWs5aiMocUrm7pjH5XvKm2OYX8K/lyaMSBvL2OTIMzXGaQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -662,6 +700,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.201.0.tgz",
"integrity": "sha512-JO0K2qPTYn+pPC7g8rWr1oueg9CqGCkYbINuAuz79vjToOLUQnZT9GiFm7QADe6J6RT1oGEKRQabNaJnp8cFpQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/shared-ini-file-loader": "3.201.0",
@@ -677,6 +716,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.201.0.tgz",
"integrity": "sha512-bWjXBd4WCiQcV4PwY+eFnlz9tZ4UiqfiJteav4MDt8YWkVlsVnR8RutmVSm3KZZjO2tJNSrla0ZWBebkNnI/Xg==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/abort-controller": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -693,6 +733,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.201.0.tgz",
"integrity": "sha512-lVMP75VsYHIW04uYbkjA0I8Bb7b+aEj6PBBLdFoA22S0uCeJOD42OSr2Gtg2fToDGO7LQJw/K2D+LMCYKfZ3vQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -706,6 +747,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.201.0.tgz",
"integrity": "sha512-RdOc1elWFpj8MogxG87nkhtylw0a+OD7W8WFM+Gw4yJMkl7cwW42VIBFfb0+KCGZfIQltIeSLRvfe3WvVPyo7Q==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -719,6 +761,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.201.0.tgz",
"integrity": "sha512-FgQnVHpYR19w/HmHEgWpykCn9tdogW0n45Ins6LBCo2aImDf9kBATD4xgN/F2rtogGuLGgu5LIIMHIOj1Tzs/w==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"@aws-sdk/util-uri-escape": "3.201.0",
@@ -733,6 +776,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.201.0.tgz",
"integrity": "sha512-vS9Ljbqrwi0sIKYxgyZYJUN1AcE291hvuqwty9etgD2w/26SbWiMhjIW/fXJUOZjUvGKkYCpbivJYSzAGAuWfQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -746,6 +790,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.201.0.tgz",
"integrity": "sha512-Pfcfmurgq8UpM0rXco6FVblcruqN4Mo3TW8/yaXrbctWpmdNT/8v19fffQIIgk94TU8Vf/nPJ7E5DXL7MZr4Fw==",
"optional": true,
+ "peer": true,
"engines": {
"node": ">=14.0.0"
}
@@ -755,6 +800,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.201.0.tgz",
"integrity": "sha512-Pbxk0TXep0yI8MnK7Prly6JuBm5Me9AITav8/zPEgTZ3fMhXhQhhiuQcuTCI9GeosSzoiu8VvK53oPtBZZFnXQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -768,6 +814,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.201.0.tgz",
"integrity": "sha512-zEHoG1/hzJq169slggkPy1SN9YPWI78Bbe/MvHGYmCmQDspblu60JSBIbAatNqAxAmcWKc2HqpyGKjCkMG94ZA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/is-array-buffer": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -785,6 +832,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.201.0.tgz",
"integrity": "sha512-cL87Jgxczee8YFkWGWKQ2Ze0vjn4+eCa1kDvEYMCOQvNujTuFgatXLgije5a7nVkSnL9WLoIP7Y7fsBGrKfMnQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/middleware-stack": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -799,6 +847,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.201.0.tgz",
"integrity": "sha512-RCQj2pQyHD330Jd4c5CHJ87k2ZqC3Mmtl6nhwH1dy3vbnGUpc3q+3yinOKoTAY934kIa7ia32Y/2EjuyHxaj1A==",
"optional": true,
+ "peer": true,
"engines": {
"node": ">=14.0.0"
}
@@ -808,6 +857,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.201.0.tgz",
"integrity": "sha512-V15aqj0tj4Y79VpuIdHUvX4Nvn4hYPB0RAn/qg5CCComIl0doLOirAQtW1MOBOyctdRlD9Uv7d1QdPLzJZMHjQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/querystring-parser": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -819,6 +869,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.202.0.tgz",
"integrity": "sha512-0QlvxCSU2CITeR/x87zls9ma+CkN3EXRGM3M5XnHWaneDI9K+O2uPpAbDfLh0SBJyO0AfIMn7Vh/BvnNNPEDpg==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -832,6 +883,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz",
"integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
}
@@ -841,6 +893,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.201.0.tgz",
"integrity": "sha512-ydZqNpB3l5kiicInpPDExPb5xHI7uyVIa1vMupnuIrJ412iNb0F2+K8LlFynzw6fSJShVKnqFcWOYRA96z1iIw==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -854,6 +907,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz",
"integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
}
@@ -863,6 +917,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.201.0.tgz",
"integrity": "sha512-q+gwQoLn/DOwirb2hgZJeEwo1D3vLhoD6FfSV42Ecfvtb4jHnWReWMHguujfCubuDgZCrMEvYQzuocS75HHsbA==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -875,6 +930,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.201.0.tgz",
"integrity": "sha512-s6Wjltd9vU+vR3n0pqSPmNDcrrkrVTdV4t7x2zz3nDsFKTI77iVNafDmuaUlOA/bIlpjCJqaWecoVrZmEKeR7A==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/is-array-buffer": "3.201.0",
"tslib": "^2.3.1"
@@ -888,6 +944,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.201.0.tgz",
"integrity": "sha512-cCRJlnRRP8vrLJomzJRBIyiyohsjJKmnIaQ9t0tAhGCywZbyjx6TlpYRZYfVWo+MwdF1Pi8ZScTrFPW0JuBOIQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -900,6 +957,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.201.0.tgz",
"integrity": "sha512-skRMAM+xrV/sDvvtHC81ExEKQEiZFaRrRdUT39fBX1SpGnFTo2wpv7XK+rAW2XopGgnLPytXLQD97Kub79o4zA==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -915,6 +973,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.201.0.tgz",
"integrity": "sha512-9N5LXRhxigbkbEcjQ4nNXHuQxp0VFlbc2/5wbcuPjIKX/OROiQI4mYQ6nuSKk7eku5sNFb9FtEHeD/RZo8od6Q==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/config-resolver": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -932,6 +991,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.202.0.tgz",
"integrity": "sha512-sNees5uDp7nfEbvzaA1DAHqoEvEb9ZOkdNH5gcj/FMBETbr00YtsuXsTZogTHQsX/otRTiudZBE3iH7R4SLSAQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -945,6 +1005,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz",
"integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -957,6 +1018,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.201.0.tgz",
"integrity": "sha512-hPJgifWh/rADabLAk1C9xXA2B3O4NUmbU58KgBRgC1HksiiHGFVZObB5fkBH8US/XV2jwORkpSf4OhretXQuKg==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -969,6 +1031,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.201.0.tgz",
"integrity": "sha512-iAitcEZo17IyKn4ku1IBgtomr25esu5OuSRjw5Or4bNOeqXB0w50cItf/9qft8LIhbvBEAUtNAYXvqNzvhTZdQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -981,6 +1044,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz",
"integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
},
@@ -993,6 +1057,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.201.0.tgz",
"integrity": "sha512-iL2gyz7GuUVtZcMZpqvfxdFrl9hc28qpagymmJ/w2yhN86YNPHdK8Sx1Yo6VxNGVDCCWGb7tHXf7VP+U4Yv/Lg==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/types": "3.201.0",
"bowser": "^2.11.0",
@@ -1004,6 +1069,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.201.0.tgz",
"integrity": "sha512-6lhhvwB3AZSISnYQpDGdlyTrzfYK2P9QYjy7vZEBRd9TSOaggiFICXe03ZvZfVOSeg0EInlMKn1fIHzPUHRuHQ==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/node-config-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -1026,6 +1092,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
"integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.3.1"
}
@@ -1035,6 +1102,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.201.0.tgz",
"integrity": "sha512-A+bJFR/1rHYOJg137E69L1sX0I+LH+xf9ZjMXG9BVO0hSo7yDPoJVpHrzTJyOc3tuRITjIGBv9Qi4TKcoOSi1A==",
"optional": true,
+ "peer": true,
"dependencies": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -1134,24 +1202,6 @@
"node": ">= 8"
}
},
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
- "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
- },
- "node_modules/@types/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
- },
- "node_modules/@types/cors": {
- "version": "2.8.13",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
- "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
"version": "17.0.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
@@ -1288,12 +1338,19 @@
"safer-buffer": "^2.1.0"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
"node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"dependencies": {
- "follow-redirects": "^1.14.0"
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
"node_modules/balanced-match": {
@@ -1302,33 +1359,6 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
- "engines": {
- "node": "^4.5.0 || >= 5.9"
- }
- },
"node_modules/base64url": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
@@ -1387,7 +1417,8 @@
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/brace-expansion": {
"version": "1.1.11",
@@ -1417,37 +1448,11 @@
"dev": true
},
"node_modules/bson": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
- "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
- "dependencies": {
- "buffer": "^5.6.0"
- },
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz",
+ "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==",
"engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
+ "node": ">=14.20.1"
}
},
"node_modules/bytes": {
@@ -1586,6 +1591,17 @@
"wrap-ansi": "^7.0.0"
}
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
@@ -1601,18 +1617,19 @@
"dev": true
},
"node_modules/connect-mongo": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.6.0.tgz",
- "integrity": "sha512-8new4Z7NLP3CGP65Aw6ls3xDBeKVvHRSh39CXuDZTQsvpeeU9oNMzfFgvqmHqZ6gWpxIl663RyoVEmCAGf1yOg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-5.0.0.tgz",
+ "integrity": "sha512-s93jiP6GkRApn5duComx6RLwtP23YrulPxShz+8peX7svd6Q+MS8nKLhKCCazbP92C13eTVaIOxgeLt0ezIiCg==",
"dependencies": {
"debug": "^4.3.1",
"kruptein": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12.9.0"
},
"peerDependencies": {
- "mongodb": "^4.1.0"
+ "express-session": "^1.17.1",
+ "mongodb": "^5.1.0"
}
},
"node_modules/content-disposition": {
@@ -1667,18 +1684,6 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
@@ -1788,6 +1793,14 @@
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -1841,42 +1854,6 @@
"node": ">= 0.8"
}
},
- "node_modules/engine.io": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
- "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
- "dependencies": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.0.3",
- "ws": "~8.11.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io-parser": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
- "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/engine.io/node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -2130,11 +2107,11 @@
}
},
"node_modules/express-session": {
- "version": "1.17.2",
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
- "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
"dependencies": {
- "cookie": "0.4.1",
+ "cookie": "0.4.2",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
@@ -2148,9 +2125,9 @@
}
},
"node_modules/express-session/node_modules/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
"engines": {
"node": ">= 0.6"
}
@@ -2225,6 +2202,7 @@
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
"integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==",
"optional": true,
+ "peer": true,
"dependencies": {
"strnum": "^1.0.5"
},
@@ -2361,6 +2339,19 @@
}
}
},
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -2516,25 +2507,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -2550,6 +2522,11 @@
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
+ "node_modules/immutable": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -2944,20 +2921,35 @@
}
},
"node_modules/mongodb": {
- "version": "4.16.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz",
- "integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz",
+ "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==",
"dependencies": {
- "bson": "^4.7.2",
- "mongodb-connection-string-url": "^2.5.4",
+ "bson": "^5.3.0",
+ "mongodb-connection-string-url": "^2.6.0",
"socks": "^2.7.1"
},
"engines": {
- "node": ">=12.9.0"
+ "node": ">=14.20.1"
},
"optionalDependencies": {
- "@aws-sdk/credential-providers": "^3.186.0",
"saslprep": "^1.0.3"
+ },
+ "peerDependencies": {
+ "@aws-sdk/credential-providers": "^3.201.0",
+ "mongodb-client-encryption": ">=2.3.0 <3",
+ "snappy": "^7.2.2"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/credential-providers": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
+ }
}
},
"node_modules/mongodb-connection-string-url": {
@@ -2970,20 +2962,20 @@
}
},
"node_modules/mongoose": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.11.2.tgz",
- "integrity": "sha512-BJHQerozE+qIVdH8Hn9niMVMUzRNcjmwU7hFEzER1+aYtGmVJgGsXBd9wJ9GnrHrbCsYmKlRy8aTuxEdlEtfow==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.3.1.tgz",
+ "integrity": "sha512-6289bmSIhvR8xMHsYe2/CuzN7wHK+2RHcK7idDdzniCPC5zix5JH0Hc4k3CmXlr/9zQ2250gUQiUWtvDB0vF1Q==",
"dependencies": {
- "bson": "^4.7.2",
+ "bson": "^5.3.0",
"kareem": "2.5.1",
- "mongodb": "4.16.0",
+ "mongodb": "5.6.0",
"mpath": "0.9.0",
- "mquery": "4.0.3",
+ "mquery": "5.0.0",
"ms": "2.1.3",
"sift": "16.0.1"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=14.20.1"
},
"funding": {
"type": "opencollective",
@@ -3004,14 +2996,14 @@
}
},
"node_modules/mquery": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz",
- "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
+ "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
"dependencies": {
"debug": "4.x"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=14.0.0"
}
},
"node_modules/ms": {
@@ -3144,14 +3136,6 @@
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
},
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -3370,6 +3354,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -3606,17 +3595,19 @@
}
},
"node_modules/sass": {
- "version": "1.38.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.1.tgz",
- "integrity": "sha512-Lj8nPaSYOuRhgqdyShV50fY5jKnvaRmikUNalMPmbH+tKMGgEKVkltI/lP30PEfO2T1t6R9yc2QIBLgOc3uaFw==",
+ "version": "1.63.6",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
+ "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
"dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
},
"bin": {
"sass": "sass.js"
},
"engines": {
- "node": ">=8.9.0"
+ "node": ">=14.0.0"
}
},
"node_modules/send": {
@@ -3743,42 +3734,6 @@
"npm": ">= 3.0.0"
}
},
- "node_modules/socket.io": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
- "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "debug": "~4.3.2",
- "engine.io": "~6.4.1",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/socket.io-adapter": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
- "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
- "dependencies": {
- "ws": "~8.11.0"
- }
- },
- "node_modules/socket.io-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
- "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
- "dependencies": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/socks": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
@@ -3792,6 +3747,14 @@
"npm": ">= 3.0.0"
}
},
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
@@ -3851,7 +3814,8 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
"integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/supports-color": {
"version": "5.5.0",
@@ -3917,7 +3881,8 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/tsscmp": {
"version": "1.0.6",
@@ -4015,6 +3980,7 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"optional": true,
+ "peer": true,
"bin": {
"uuid": "dist/bin/uuid"
}
@@ -4133,26 +4099,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
- "node_modules/ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -4223,6 +4169,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.2.tgz",
"integrity": "sha512-5XDMQY98gMAf/WRTic5G++jfmS/VLM0rwpiOpaainKi4L0nqWMSB1SzsrEG5rjFZGYN6ZAefO+/Yta2dFM0kMw==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^1.11.1"
},
@@ -4231,7 +4178,8 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
}
}
},
@@ -4240,6 +4188,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz",
"integrity": "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-crypto/ie11-detection": "^2.0.0",
"@aws-crypto/sha256-js": "^2.0.0",
@@ -4255,7 +4204,8 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
}
}
},
@@ -4264,6 +4214,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz",
"integrity": "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-crypto/util": "^2.0.0",
"@aws-sdk/types": "^3.1.0",
@@ -4274,7 +4225,8 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
}
}
},
@@ -4283,6 +4235,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.2.tgz",
"integrity": "sha512-6mbSsLHwZ99CTOOswvCRP3C+VCWnzBf+1SnbWxzzJ9lR0mA0JnY2JEAhp8rqmTE0GPFy88rrM27ffgp62oErMQ==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^1.11.1"
},
@@ -4291,7 +4244,8 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
}
}
},
@@ -4300,6 +4254,7 @@
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.2.tgz",
"integrity": "sha512-Lgu5v/0e/BcrZ5m/IWqzPUf3UYFTy/PpeED+uc9SWUR1iZQL8XXbGQg10UfllwwBryO3hFF5dizK+78aoXC1eA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "^3.110.0",
"@aws-sdk/util-utf8-browser": "^3.0.0",
@@ -4310,7 +4265,8 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "optional": true
+ "optional": true,
+ "peer": true
}
}
},
@@ -4319,6 +4275,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.201.0.tgz",
"integrity": "sha512-xJ984k+CKlGjBmvNarzM8Y+b6X4L1Zt0TycQmVBJq7fAr/ju9l13pQIoXR5WlDIW1FkGeVczF5Nu6fN46SCORQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4329,6 +4286,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.204.0.tgz",
"integrity": "sha512-uftJkNKYcZ8bXVwcpOn5ZUjUX0IRto0ZrTO8DBdS9b7PJu2Y84eSy46LsAYuRDC0PZreQxy8nOH5HmI86/W8xQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -4374,6 +4332,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.204.0.tgz",
"integrity": "sha512-AECcNrcAQxV/Jlu8ogshRaYwt2jayx0omQJs/SXj70mWxmbk4MQnb+DqJIpPpOKBHaza/xlC2TKS1RzkiuZxyw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -4416,6 +4375,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.204.0.tgz",
"integrity": "sha512-Tp6FqENRw31XK5r5hul1JXnQgHBhbbXhoMebyFih6/zjpATaqg0bnV6tpww4yPi3uc+yDGXKw2/tDroSsyTsRA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-crypto/sha256-browser": "2.0.0",
"@aws-crypto/sha256-js": "2.0.0",
@@ -4462,6 +4422,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.201.0.tgz",
"integrity": "sha512-6YLIel7OGMGi+r8XC1A54cQJRIpx/NJ4fBALy44zFpQ+fdJUEmw4daUf1LECmAQiPA2Pr/hD0nBtX+wiiTf5/g==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/signature-v4": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4475,6 +4436,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.204.0.tgz",
"integrity": "sha512-DmiGXe7pXWuJiAGphzY5cRaphRiU5DJ6Tcg/88Td3wnj22As5DCELetb7E2YC9DfwmKiWcGAKQaYQqWe5AzSqw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/client-cognito-identity": "3.204.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -4487,6 +4449,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.201.0.tgz",
"integrity": "sha512-g2MJsowzFhSsIOITUjYp7EzWFeHINjEP526Uf+5z2/p2kxQVwYYWZQK7j+tPE2Bk3MEjGOCmVHbbE7IFj0rNHw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4498,6 +4461,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.201.0.tgz",
"integrity": "sha512-i8U2k3/L3iUWJJ1GSlwVBMfLQ2OTUT97E8yJi/xz5GavYuPOsUQWQe4fp7WGQivxh+AqybXAGFUCYub6zfUqag==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/node-config-provider": "3.201.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -4511,6 +4475,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.204.0.tgz",
"integrity": "sha512-ddtaS0ya5lgZZwfuJ/FuniroreLJ6yDgPAasol/rla9U5EU0qUEK1+6PX463exghUGjYfTqxdrKXhGYZfuEoIw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/credential-provider-env": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -4527,6 +4492,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.204.0.tgz",
"integrity": "sha512-kGbR5JE90zBGDS4cIz7tlUklMMeOm5oc5ES74YStLUacpQKwzVcHmDG8aT2DCONS/wEYysOIs5LygHurOJ/+Ww==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/credential-provider-env": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -4545,6 +4511,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.201.0.tgz",
"integrity": "sha512-jTK3HSZgNj/hVrWb0wuF/cPUWSJYoRI/80fnN55o6QLS8WWIgOI8o2PNeVTAT5OrKioSoN4fgKTeUm3DZy3npQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/shared-ini-file-loader": "3.201.0",
@@ -4557,6 +4524,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.204.0.tgz",
"integrity": "sha512-iS884Gda99x4zmdCK3XxFcceve4wB+wudpeTUm2wwX9AGrSzoUnLWqNXv/R8UAMAsKANaWMBkqv/bsHpsEitZw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/client-sso": "3.204.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -4570,6 +4538,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.201.0.tgz",
"integrity": "sha512-U54bqhYaClPVZfswgknhlICp3BAtKXpOgHQCUF8cko5xUgbL4lVgd1rC3lWviGFMQAaTIF3QOXyEouemxr3VXw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4581,6 +4550,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.204.0.tgz",
"integrity": "sha512-XlVfSWoXAiuQb5Q053McnmqSvllojKAc8ecQiLgLXstXXcHrI36E4XH7VkMaNV8JPPdLQhmLxrj01vzUyoT47Q==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/client-cognito-identity": "3.204.0",
"@aws-sdk/client-sso": "3.204.0",
@@ -4604,6 +4574,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.204.0.tgz",
"integrity": "sha512-TfIhWYQ4CTjrD+FSuBcKMSVrqq8GCwqCfUyalWmSKo4JIFhN5OxUnOFb1/ecE/TJX+YgZ65w4qhVJVHHmh229Q==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/querystring-builder": "3.201.0",
@@ -4617,6 +4588,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.201.0.tgz",
"integrity": "sha512-WJsMZg5/TMoWnLM+0NuwLwFzHsi89Bi9J1Dt7JdJHXFLoEZV54FEz1PK/Sq5NOldhVljpXQwWOB2dHA2wxFztg==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"@aws-sdk/util-buffer-from": "3.201.0",
@@ -4628,6 +4600,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.201.0.tgz",
"integrity": "sha512-f/zgntOfIozNyKSaG9dvHjjBaR3y20kYNswMYkSuCM2NIT5LpyHiiq5I11TwaocatUFcDztWpcsv7vHpIgI5Ig==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4638,6 +4611,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz",
"integrity": "sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4647,6 +4621,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.201.0.tgz",
"integrity": "sha512-p4G9AtdrKO8A3Z4RyZiy0isEYwuge7bQRBS7UzcGkcIOhJONq2pcM+gRZYz+NWvfYYNWUg5uODsFQfU8342yKg==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4658,6 +4633,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.201.0.tgz",
"integrity": "sha512-F3JlXo5GusbeZR956hA9VxmDxUeg77Xh6o8fveAE2+G4Bjcb1iq9jPNlw6A14vDj3oTKenv2LLnjL2OIfl6hRA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/middleware-serde": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -4674,6 +4650,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.201.0.tgz",
"integrity": "sha512-7KNzdV7nFcKAoahvgGAlzsOq9FFDsU5h3w2iPtVdJhz6ZRDH/2v6WFeUCji+UNZip36gFfMPivoO8Y5smb5r/A==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4685,6 +4662,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.201.0.tgz",
"integrity": "sha512-kYLsa9x3oUJxYU7V5KOO50Kl7b0kk+I4ltkrdarLvvXcVI7ZXmWHzHLT2dkUhj8S0ceVdi0FYHVPJ3GoE8re4A==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4695,6 +4673,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.201.0.tgz",
"integrity": "sha512-NGOr+n559ZcJLdFoJR8LNGdrOJFIp2BTuWEDYeicNdNb0bETTXrkzcfT1BRhV9CWqCDmjFvjdrzbhS0cw/UUGA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4706,6 +4685,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.201.0.tgz",
"integrity": "sha512-4jQjSKCpSc4oB1X9nNq4FbIAwQrr+mvmUSmg/oe2Llf42Ak1G9gg3rNTtQdfzA/wNMlL4ZFfF5Br+uz06e1hnQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/service-error-classification": "3.201.0",
@@ -4720,6 +4700,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.201.0.tgz",
"integrity": "sha512-clZuXcoN0mAP4JH5C6pW5+0tdF25+fpFJqE7GNRjjH/NYNk6ImVI0Kq2espEWwVBuaS0/chTDK3b+pK8YOWdhw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/middleware-signing": "3.201.0",
"@aws-sdk/property-provider": "3.201.0",
@@ -4734,6 +4715,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.201.0.tgz",
"integrity": "sha512-Z7AzIuqEDvsZmp80zeT1oYxsoB8uQZby20Z8kF6/vNoq3sIzaGf/wHeNn0p+Vgo2auGSbZcVUZKoDptQLSLwIQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4744,6 +4726,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.201.0.tgz",
"integrity": "sha512-08ri5+mB28tva9RjVIXFcUP5lRTx+Pj8C2HYqF2GL5H3uAo+h3RQ++fEG1uwUMLf7tCEFivcw6SHA1KmCnB7+w==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -4758,6 +4741,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.201.0.tgz",
"integrity": "sha512-lqHYSBP5FBxzA5w5XiYYYpfXabFzleXonqRkqZts1tapNJ4sOd+itiKG8JoNP7LDOwJ8qxNW/a33/gQeh3wkwQ==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4767,6 +4751,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.201.0.tgz",
"integrity": "sha512-/rYZ93WN1gDJudXis/0382CEoTqRa4qZJA608u2EPWs5aiMocUrm7pjH5XvKm2OYX8K/lyaMSBvL2OTIMzXGaQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/protocol-http": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4778,6 +4763,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.201.0.tgz",
"integrity": "sha512-JO0K2qPTYn+pPC7g8rWr1oueg9CqGCkYbINuAuz79vjToOLUQnZT9GiFm7QADe6J6RT1oGEKRQabNaJnp8cFpQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/shared-ini-file-loader": "3.201.0",
@@ -4790,6 +4776,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.201.0.tgz",
"integrity": "sha512-bWjXBd4WCiQcV4PwY+eFnlz9tZ4UiqfiJteav4MDt8YWkVlsVnR8RutmVSm3KZZjO2tJNSrla0ZWBebkNnI/Xg==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/abort-controller": "3.201.0",
"@aws-sdk/protocol-http": "3.201.0",
@@ -4803,6 +4790,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.201.0.tgz",
"integrity": "sha512-lVMP75VsYHIW04uYbkjA0I8Bb7b+aEj6PBBLdFoA22S0uCeJOD42OSr2Gtg2fToDGO7LQJw/K2D+LMCYKfZ3vQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4813,6 +4801,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.201.0.tgz",
"integrity": "sha512-RdOc1elWFpj8MogxG87nkhtylw0a+OD7W8WFM+Gw4yJMkl7cwW42VIBFfb0+KCGZfIQltIeSLRvfe3WvVPyo7Q==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4823,6 +4812,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.201.0.tgz",
"integrity": "sha512-FgQnVHpYR19w/HmHEgWpykCn9tdogW0n45Ins6LBCo2aImDf9kBATD4xgN/F2rtogGuLGgu5LIIMHIOj1Tzs/w==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"@aws-sdk/util-uri-escape": "3.201.0",
@@ -4834,6 +4824,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.201.0.tgz",
"integrity": "sha512-vS9Ljbqrwi0sIKYxgyZYJUN1AcE291hvuqwty9etgD2w/26SbWiMhjIW/fXJUOZjUvGKkYCpbivJYSzAGAuWfQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4843,13 +4834,15 @@
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.201.0.tgz",
"integrity": "sha512-Pfcfmurgq8UpM0rXco6FVblcruqN4Mo3TW8/yaXrbctWpmdNT/8v19fffQIIgk94TU8Vf/nPJ7E5DXL7MZr4Fw==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"@aws-sdk/shared-ini-file-loader": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.201.0.tgz",
"integrity": "sha512-Pbxk0TXep0yI8MnK7Prly6JuBm5Me9AITav8/zPEgTZ3fMhXhQhhiuQcuTCI9GeosSzoiu8VvK53oPtBZZFnXQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -4860,6 +4853,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.201.0.tgz",
"integrity": "sha512-zEHoG1/hzJq169slggkPy1SN9YPWI78Bbe/MvHGYmCmQDspblu60JSBIbAatNqAxAmcWKc2HqpyGKjCkMG94ZA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/is-array-buffer": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4874,6 +4868,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.201.0.tgz",
"integrity": "sha512-cL87Jgxczee8YFkWGWKQ2Ze0vjn4+eCa1kDvEYMCOQvNujTuFgatXLgije5a7nVkSnL9WLoIP7Y7fsBGrKfMnQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/middleware-stack": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4884,13 +4879,15 @@
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.201.0.tgz",
"integrity": "sha512-RCQj2pQyHD330Jd4c5CHJ87k2ZqC3Mmtl6nhwH1dy3vbnGUpc3q+3yinOKoTAY934kIa7ia32Y/2EjuyHxaj1A==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"@aws-sdk/url-parser": {
"version": "3.201.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.201.0.tgz",
"integrity": "sha512-V15aqj0tj4Y79VpuIdHUvX4Nvn4hYPB0RAn/qg5CCComIl0doLOirAQtW1MOBOyctdRlD9Uv7d1QdPLzJZMHjQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/querystring-parser": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4902,6 +4899,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64/-/util-base64-3.202.0.tgz",
"integrity": "sha512-0QlvxCSU2CITeR/x87zls9ma+CkN3EXRGM3M5XnHWaneDI9K+O2uPpAbDfLh0SBJyO0AfIMn7Vh/BvnNNPEDpg==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -4912,6 +4910,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.188.0.tgz",
"integrity": "sha512-qlH+5NZBLiyKziL335BEPedYxX6j+p7KFRWXvDQox9S+s+gLCayednpK+fteOhBenCcR9fUZOVuAPScy1I8qCg==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4921,6 +4920,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.201.0.tgz",
"integrity": "sha512-ydZqNpB3l5kiicInpPDExPb5xHI7uyVIa1vMupnuIrJ412iNb0F2+K8LlFynzw6fSJShVKnqFcWOYRA96z1iIw==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -4931,6 +4931,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz",
"integrity": "sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4940,6 +4941,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.201.0.tgz",
"integrity": "sha512-q+gwQoLn/DOwirb2hgZJeEwo1D3vLhoD6FfSV42Ecfvtb4jHnWReWMHguujfCubuDgZCrMEvYQzuocS75HHsbA==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4949,6 +4951,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.201.0.tgz",
"integrity": "sha512-s6Wjltd9vU+vR3n0pqSPmNDcrrkrVTdV4t7x2zz3nDsFKTI77iVNafDmuaUlOA/bIlpjCJqaWecoVrZmEKeR7A==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/is-array-buffer": "3.201.0",
"tslib": "^2.3.1"
@@ -4959,6 +4962,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.201.0.tgz",
"integrity": "sha512-cCRJlnRRP8vrLJomzJRBIyiyohsjJKmnIaQ9t0tAhGCywZbyjx6TlpYRZYfVWo+MwdF1Pi8ZScTrFPW0JuBOIQ==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -4968,6 +4972,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.201.0.tgz",
"integrity": "sha512-skRMAM+xrV/sDvvtHC81ExEKQEiZFaRrRdUT39fBX1SpGnFTo2wpv7XK+rAW2XopGgnLPytXLQD97Kub79o4zA==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/property-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -4980,6 +4985,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.201.0.tgz",
"integrity": "sha512-9N5LXRhxigbkbEcjQ4nNXHuQxp0VFlbc2/5wbcuPjIKX/OROiQI4mYQ6nuSKk7eku5sNFb9FtEHeD/RZo8od6Q==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/config-resolver": "3.201.0",
"@aws-sdk/credential-provider-imds": "3.201.0",
@@ -4994,6 +5000,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.202.0.tgz",
"integrity": "sha512-sNees5uDp7nfEbvzaA1DAHqoEvEb9ZOkdNH5gcj/FMBETbr00YtsuXsTZogTHQsX/otRTiudZBE3iH7R4SLSAQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"tslib": "^2.3.1"
@@ -5004,6 +5011,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz",
"integrity": "sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -5013,6 +5021,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.201.0.tgz",
"integrity": "sha512-hPJgifWh/rADabLAk1C9xXA2B3O4NUmbU58KgBRgC1HksiiHGFVZObB5fkBH8US/XV2jwORkpSf4OhretXQuKg==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -5022,6 +5031,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.201.0.tgz",
"integrity": "sha512-iAitcEZo17IyKn4ku1IBgtomr25esu5OuSRjw5Or4bNOeqXB0w50cItf/9qft8LIhbvBEAUtNAYXvqNzvhTZdQ==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -5031,6 +5041,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz",
"integrity": "sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -5040,6 +5051,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.201.0.tgz",
"integrity": "sha512-iL2gyz7GuUVtZcMZpqvfxdFrl9hc28qpagymmJ/w2yhN86YNPHdK8Sx1Yo6VxNGVDCCWGb7tHXf7VP+U4Yv/Lg==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/types": "3.201.0",
"bowser": "^2.11.0",
@@ -5051,6 +5063,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.201.0.tgz",
"integrity": "sha512-6lhhvwB3AZSISnYQpDGdlyTrzfYK2P9QYjy7vZEBRd9TSOaggiFICXe03ZvZfVOSeg0EInlMKn1fIHzPUHRuHQ==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/node-config-provider": "3.201.0",
"@aws-sdk/types": "3.201.0",
@@ -5062,6 +5075,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.188.0.tgz",
"integrity": "sha512-jt627x0+jE+Ydr9NwkFstg3cUvgWh56qdaqAMDsqgRlKD21md/6G226z/Qxl7lb1VEW2LlmCx43ai/37Qwcj2Q==",
"optional": true,
+ "peer": true,
"requires": {
"tslib": "^2.3.1"
}
@@ -5071,6 +5085,7 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.201.0.tgz",
"integrity": "sha512-A+bJFR/1rHYOJg137E69L1sX0I+LH+xf9ZjMXG9BVO0hSo7yDPoJVpHrzTJyOc3tuRITjIGBv9Qi4TKcoOSi1A==",
"optional": true,
+ "peer": true,
"requires": {
"@aws-sdk/util-buffer-from": "3.201.0",
"tslib": "^2.3.1"
@@ -5142,24 +5157,6 @@
"fastq": "^1.6.0"
}
},
- "@socket.io/component-emitter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
- "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
- },
- "@types/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
- },
- "@types/cors": {
- "version": "2.8.13",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
- "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/node": {
"version": "17.0.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
@@ -5272,12 +5269,19 @@
"safer-buffer": "^2.1.0"
}
},
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
"axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
+ "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"requires": {
- "follow-redirects": "^1.14.0"
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
"balanced-match": {
@@ -5286,16 +5290,6 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "base64id": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
- "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
- },
"base64url": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
@@ -5347,7 +5341,8 @@
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
"integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"brace-expansion": {
"version": "1.1.11",
@@ -5374,21 +5369,9 @@
"dev": true
},
"bson": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
- "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
- "requires": {
- "buffer": "^5.6.0"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz",
+ "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag=="
},
"bytes": {
"version": "3.1.1",
@@ -5484,6 +5467,14 @@
"wrap-ansi": "^7.0.0"
}
},
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
"commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
@@ -5496,9 +5487,9 @@
"dev": true
},
"connect-mongo": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.6.0.tgz",
- "integrity": "sha512-8new4Z7NLP3CGP65Aw6ls3xDBeKVvHRSh39CXuDZTQsvpeeU9oNMzfFgvqmHqZ6gWpxIl663RyoVEmCAGf1yOg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-5.0.0.tgz",
+ "integrity": "sha512-s93jiP6GkRApn5duComx6RLwtP23YrulPxShz+8peX7svd6Q+MS8nKLhKCCazbP92C13eTVaIOxgeLt0ezIiCg==",
"requires": {
"debug": "^4.3.1",
"kruptein": "^3.0.0"
@@ -5543,15 +5534,6 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
"cross-env": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
@@ -5627,6 +5609,11 @@
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -5668,35 +5655,6 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
- "engine.io": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz",
- "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==",
- "requires": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~5.0.3",
- "ws": "~8.11.0"
- },
- "dependencies": {
- "cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
- }
- }
- },
- "engine.io-parser": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
- "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw=="
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -5916,11 +5874,11 @@
}
},
"express-session": {
- "version": "1.17.2",
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz",
- "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==",
+ "version": "1.17.3",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz",
+ "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==",
"requires": {
- "cookie": "0.4.1",
+ "cookie": "0.4.2",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
@@ -5931,9 +5889,9 @@
},
"dependencies": {
"cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
+ "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
},
"debug": {
"version": "2.6.9",
@@ -5978,6 +5936,7 @@
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.11.tgz",
"integrity": "sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==",
"optional": true,
+ "peer": true,
"requires": {
"strnum": "^1.0.5"
}
@@ -6074,6 +6033,16 @@
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
"forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -6183,11 +6152,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -6200,6 +6164,11 @@
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
+ "immutable": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
+ "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
+ },
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -6491,13 +6460,12 @@
}
},
"mongodb": {
- "version": "4.16.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz",
- "integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==",
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz",
+ "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==",
"requires": {
- "@aws-sdk/credential-providers": "^3.186.0",
- "bson": "^4.7.2",
- "mongodb-connection-string-url": "^2.5.4",
+ "bson": "^5.3.0",
+ "mongodb-connection-string-url": "^2.6.0",
"saslprep": "^1.0.3",
"socks": "^2.7.1"
}
@@ -6512,15 +6480,15 @@
}
},
"mongoose": {
- "version": "6.11.2",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.11.2.tgz",
- "integrity": "sha512-BJHQerozE+qIVdH8Hn9niMVMUzRNcjmwU7hFEzER1+aYtGmVJgGsXBd9wJ9GnrHrbCsYmKlRy8aTuxEdlEtfow==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.3.1.tgz",
+ "integrity": "sha512-6289bmSIhvR8xMHsYe2/CuzN7wHK+2RHcK7idDdzniCPC5zix5JH0Hc4k3CmXlr/9zQ2250gUQiUWtvDB0vF1Q==",
"requires": {
- "bson": "^4.7.2",
+ "bson": "^5.3.0",
"kareem": "2.5.1",
- "mongodb": "4.16.0",
+ "mongodb": "5.6.0",
"mpath": "0.9.0",
- "mquery": "4.0.3",
+ "mquery": "5.0.0",
"ms": "2.1.3",
"sift": "16.0.1"
},
@@ -6538,9 +6506,9 @@
"integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew=="
},
"mquery": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz",
- "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
+ "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
"requires": {
"debug": "4.x"
}
@@ -6631,11 +6599,6 @@
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
},
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
- },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -6786,6 +6749,11 @@
"ipaddr.js": "1.9.1"
}
},
+ "proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"pstree.remy": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@@ -6933,11 +6901,13 @@
}
},
"sass": {
- "version": "1.38.1",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.1.tgz",
- "integrity": "sha512-Lj8nPaSYOuRhgqdyShV50fY5jKnvaRmikUNalMPmbH+tKMGgEKVkltI/lP30PEfO2T1t6R9yc2QIBLgOc3uaFw==",
+ "version": "1.63.6",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
+ "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
"requires": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
}
},
"send": {
@@ -7048,36 +7018,6 @@
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
},
- "socket.io": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz",
- "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==",
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "debug": "~4.3.2",
- "engine.io": "~6.4.1",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.1"
- }
- },
- "socket.io-adapter": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
- "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
- "requires": {
- "ws": "~8.11.0"
- }
- },
- "socket.io-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
- "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
- "requires": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- }
- },
"socks": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
@@ -7087,6 +7027,11 @@
"smart-buffer": "^4.2.0"
}
},
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
"sparse-bitfield": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
@@ -7131,7 +7076,8 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
"integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"supports-color": {
"version": "5.5.0",
@@ -7182,7 +7128,8 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"tsscmp": {
"version": "1.0.6",
@@ -7255,7 +7202,8 @@
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "optional": true
+ "optional": true,
+ "peer": true
},
"vary": {
"version": "1.1.2",
@@ -7340,12 +7288,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
- "ws": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "requires": {}
- },
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 81710e95..a500998d 100644
--- a/package.json
+++ b/package.json
@@ -30,19 +30,18 @@
},
"homepage": "https://github.com/kgpmask/MASK#readme",
"dependencies": {
- "axios": "^0.21.1",
- "connect-mongo": "^4.6.0",
+ "axios": "^1.4.0",
+ "connect-mongo": "^5.0.0",
"cookie-parser": "^1.4.6",
"csurf": "^1.11.0",
"express": "^5.0.0-beta.1",
- "express-session": "^1.17.2",
- "mongodb": "^4.8.0",
- "mongoose": "^6.2.4",
- "nunjucks": "^3.2.3",
+ "express-session": "^1.17.3",
+ "mongodb": "^5.6.0",
+ "mongoose": "^7.3.1",
+ "nunjucks": "^3.2.4",
"passport": "^0.6.0",
"passport-google-oauth20": "^2.0.0",
- "sass": "^1.38.1",
- "socket.io": "^4.5.3"
+ "sass": "^1.63.6"
},
"devDependencies": {
"cross-env": "^7.0.3",
diff --git a/routes/checker.js b/routes/checker.js
index 03a62e60..56c37dff 100644
--- a/routes/checker.js
+++ b/routes/checker.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const checker = require('../src/checker.js');
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
@@ -14,4 +13,7 @@ router.post('/:newsletter/:puzzleType', async (req, res) => {
}
});
-module.exports = router;
+module.exports = {
+ route: '/checker',
+ router
+};
diff --git a/routes/corsProxy.js b/routes/corsProxy.js
index 39adfdf6..f32ac41a 100644
--- a/routes/corsProxy.js
+++ b/routes/corsProxy.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const axios = require('axios');
router.get('/', (req, res) => {
@@ -10,4 +9,7 @@ router.get('/', (req, res) => {
});
});
-module.exports = router;
+module.exports = {
+ route: '/corsProxy',
+ router
+};
diff --git a/routes/git-hook.js b/routes/git-hook.js
index 12949c80..3908a363 100644
--- a/routes/git-hook.js
+++ b/routes/git-hook.js
@@ -1,11 +1,9 @@
-const express = require('express');
-const router = express.Router();
const crypto = require('crypto');
+const router = require('express').Router();
-const Tools = require("../src/tools");
+const Tools = require('../src/tools');
router.post('/', async (req, res) => {
-
// Console log git hook requests
console.log(`git-hook request sent at: ${new Date()}`);
const pushBranch = req.body.ref.split('/')[2];
@@ -36,7 +34,7 @@ router.post('/', async (req, res) => {
try {
await new Promise(async (resolve, reject) => {
// Keeping timeout this small because I know it won't work
- setTimeout(() => reject(new Error('60 seconds time out')), 60_000);
+ setTimeout(() => reject(new Error('60 seconds time out')), 75_000);
await Tools.updateCode();
return resolve('Successfully updated');
});
@@ -48,4 +46,7 @@ router.post('/', async (req, res) => {
}
});
-module.exports = router;
+module.exports = {
+ route: '/git-hook',
+ router
+};
diff --git a/routes/govportal.js b/routes/govportal.js
index c28be923..72257280 100644
--- a/routes/govportal.js
+++ b/routes/govportal.js
@@ -1,14 +1,13 @@
-const express = require("express");
-const router = express.Router();
+const router = require('express').Router();
-const dbh = PARAMS.mongoless ? {} : require("../database/handler");
+const dbh = PARAMS.mongoless ? {} : require('../database/handler');
router.use((req, res, next) => {
- if (PARAMS.userless) return res.notFound('404.njk', {
+ if (PARAMS.userless && !PARAMS.jsonuser) return res.notFound('404.njk', {
message: 'Sorry. This is currently not available in mongoless and userless mode.'
});
- if (!req.loggedIn) return res.redirect('/login');
+ if (!req.loggedIn) return res.loginRedirect(req, res);
if (!req.user.permissions.find(perm => perm === 'governor')) return res.status(403).renderFile('404.njk', {
message: 'Access denied. You do not have the required permission.'
});
@@ -23,6 +22,20 @@ router.get('/', (req, res) => {
router.get('/add-post', (req, res) => {
return res.renderFile(`govportal/add-post.njk`);
});
+router.get('/post-management', async (req, res) => {
+ const posts = (await dbh.getPosts().limit(20)).map(post => post.toObject());
+ return res.renderFile(`govportal/post-management.njk`, { posts });
+});
+router.get('/edit-post', async (req, res) => {
+ const id = req.query.id;
+ const data = (await dbh.getPost(id)).toObject();
+ return res.renderFile(`govportal/edit-post.njk`, { ...data, date: data.date.toISOString().slice(0, 10) });
+});
+
+router.get('/poll-management', async (req, res) => {
+ const polls = await dbh.getPolls();
+ return res.renderFile(`govportal/poll-management.njk`, { polls });
+});
router.get('/add-poll', (req, res) => {
const date = new Date();
@@ -30,6 +43,12 @@ router.get('/add-poll', (req, res) => {
return res.renderFile(`govportal/add-poll.njk`, { date: date.toISOString().slice(0, 10) });
});
+router.get('/edit-poll', async (req, res) => {
+ const id = req.query.id;
+ const poll = (await dbh.getPoll(id)).toObject();
+ return res.renderFile(`govportal/edit-poll.njk`, { ...poll, endTime: poll.endTime.toISOString().slice(0, 10) });
+});
+
router.get('/member-management', async (req, res) => {
const hierarchy = [
'Governor',
@@ -57,32 +76,33 @@ router.get('/member-management', async (req, res) => {
router.post('/add-post', async (req, res) => {
const data = req.body.data;
if (!data.name || !data.link || !data.attr[0] && ['youtube', 'instagram'].includes(data.type)) {
- return res.send({ success: false, message: "Empty Data Provided" });
+ return res.send({ success: false, message: 'Empty Data Provided' });
}
data.date = new Date().toISOString();
try {
response = await dbh.addPost(data);
- return res.send({ success: true, message: "Successfully Added Post", response: response });
+ // console.log(response);
+ return res.send({ success: true, message: 'Successfully Added Post', response: response });
} catch (e) {
console.log(e);
- return res.send({ success: false, message: "Something Went Wrong" });
+ return res.send({ success: false, message: 'Something Went Wrong' });
}
});
router.post('/add-poll', async (req, res) => {
const data = req.body.data;
- if (!data.title || !data.records.length) return res.send({ success: false, message: "Empty Data Provided" });
+ if (!data.title || !data.records.length) return res.send({ success: false, message: 'Empty Data Provided' });
data.endTime = new Date(data.endTime).toISOString();
const now = new Date();
- if (!(now < new Date(data.endTime))) return res.send({ success: false, message: "Invalid End Date" });
+ if (!(now < new Date(data.endTime))) return res.send({ success: false, message: 'Invalid End Date' });
try {
- data._id = now.getFullYear() + "-" + ("0" + (now.getMonth() + 1)).slice(-2) + "-" + ((await dbh.getMonthlyPolls()).length + 1);
- console.log(data);
+ data._id = now.getFullYear() + '-' + ('0' + (now.getMonth() + 1)).slice(-2) + '-' + ((await dbh.getMonthlyPolls()).length + 1);
+ // console.log(data);
response = await dbh.addPoll(data);
- return res.send({ success: true, message: "Successfully Added Poll", response: response });
+ return res.send({ success: true, message: 'Successfully Added Poll', response: response });
} catch (e) {
console.log(e);
- return res.send({ success: false, message: "Something Went Wrong" });
+ return res.send({ success: false, message: 'Something Went Wrong' });
}
});
@@ -104,4 +124,74 @@ router.post('/member-management', async (req, res) => {
return res.send(response);
});
-module.exports = router;
+router.get('/add-member', (req, res) => {
+ return res.renderFile('govportal/govportal.njk', { message: 'Try again (once we actually get new members)' });
+});
+
+router.post('/post-management', async (req, res) => {
+ const data = req.body.data;
+ let response;
+ try {
+ response = await dbh.deletePost(data);
+ // console.log(response)
+ return res.send({ success: true, message: 'Successfully deleted post', response: response });
+ } catch (e) {
+ return res.send({ success: false, message: 'Something Went Wrong' });
+ }
+});
+
+router.patch('/edit-post', async (req, res) => {
+ const data = req.body.data;
+ // console.log("update",data)
+ try {
+ response = await dbh.editPost(data);
+ // console.log(response);
+ return res.send({ success: true, message: 'Successfully Edited Post', response: response });
+ } catch (e) {
+ console.log(e);
+ return res.send({ success: false, message: 'Something Went Wrong' });
+ }
+});
+
+router.post('/poll-management', async (req, res) => {
+ const data = req.body.data;
+ let response;
+ try {
+ response = await dbh.deletePoll(data);
+ // console.log(response)
+ return res.send({ success: true, message: 'Successfully deleted post', response: response });
+ } catch (e) {
+ return res.send({ success: false, message: 'Something Went Wrong' });
+ }
+});
+
+router.patch('/edit-poll', async (req, res) => {
+ const data = req.body.data;
+ if (!data.title || !data.records.length) return res.send({ success: false, message: 'Empty Data Provided' });
+ data.endTime = new Date(data.endTime).toISOString();
+ const now = new Date();
+ if (!(now < new Date(data.endTime))) return res.send({ success: false, message: 'Invalid End Date' });
+ try {
+ response = await dbh.editPoll(data);
+ console.log(response);
+ return res.send({ success: true, message: 'Successfully Updated Poll', response: response });
+ } catch (e) {
+ console.log(e);
+ return res.send({ success: false, message: 'Something Went Wrong' });
+ }
+});
+
+router.patch('/delete-option', async (req, res) => {
+ const data = req.body.data;
+ try {
+ response = await dbh.deletePollOption(data);
+ console.log(response);
+ } catch (e) {
+ console.log(e);
+ }
+});
+
+module.exports = {
+ route: '/gov-portal',
+ router
+};
diff --git a/routes/home.js b/routes/home.js
index 0cb70008..be7ed515 100644
--- a/routes/home.js
+++ b/routes/home.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
const sample = require('../src/samples/posts');
@@ -18,4 +17,7 @@ router.get('/', async (req, res) => {
return res.renderFile('home.njk', { posts, vids, art });
});
-module.exports = router;
+module.exports = {
+ route: ['/home', '/'],
+ router
+};
diff --git a/routes/instaupload.js b/routes/instaupload.js
deleted file mode 100644
index 890a8b9a..00000000
--- a/routes/instaupload.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const { IgApiClient } = require("instagram-private-api");
-const { readFile } = require("fs");
-const { promisify } = require("util");
-const readFileAsync = promisify(readFile);
-require("dotenv").config();
-const ig = new IgApiClient();
-const postToInsta = async (files) => {
- try {
- ig.state.generateDevice(process.env.IG_USERNAME);
- await ig.account.login(process.env.IG_USERNAME, process.env.IG_PASSWORD);
-
- await ig.publish.photo({
- file: files.data,
- caption: "Really nice photo from the internet!"
- });
- } catch (err) {
- console.log(err);
- }
-};
-
-module.exports = postToInsta;
diff --git a/routes/live.js b/routes/live.js
index d3266a5b..e490ec50 100644
--- a/routes/live.js
+++ b/routes/live.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const checker = require('../src/checker.js');
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
@@ -33,7 +32,7 @@ router.get('/master', async (req, res) => {
if (PARAMS.dev) {
// TODO: In the future, set a 'daily' script to run at midnight and update a process.env.LIVE_QUIZ parameter
const quiz = await dbh.getLiveQuiz('2022-11-12');
- console.log("Hello");
+ console.log('Hello');
// if (!quiz) return res.renderFile('events/quizzes_404.njk', { message: `The quiz hasn't started, yet!` });
const QUIZ = quiz.questions;
@@ -163,4 +162,7 @@ router.post('/end', async (req, res) => {
return res.send('Ended!');
});
-module.exports = router;
+module.exports = {
+ route: '/live',
+ router
+};
diff --git a/routes/media.js b/routes/media.js
index 15227fd2..c1770a31 100644
--- a/routes/media.js
+++ b/routes/media.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
const sample = require('../src/samples/posts');
@@ -10,7 +9,7 @@ router.get('/art', async (req, res) => {
});
router.get('/videos', async (req, res) => {
- const vids = PARAMS.mongoless ? sample.filter(post => post.type === 'youtube') : await dbh.getPosts("youtube");
+ const vids = PARAMS.mongoless ? sample.filter(post => post.type === 'youtube') : await dbh.getPosts('youtube');
vids.forEach((vid) => {
vid.embed = `https://www.youtube.com/embed/${vid.link.split('?v=')[1]}?playsinline=1`;
});
@@ -18,4 +17,7 @@ router.get('/videos', async (req, res) => {
});
-module.exports = router;
+module.exports = {
+ route: '/',
+ router
+};
diff --git a/routes/members.js b/routes/members.js
index c7200c6e..c98913a3 100644
--- a/routes/members.js
+++ b/routes/members.js
@@ -1,11 +1,10 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
const sample = require('../src/samples/members');
router.get('/:yearName?', async (req, res) => {
- const yearName = parseInt(req.params.yearName) || 2022;
+ const yearName = ~~Object.keys(require('../src/teams.json')).sort().pop();
const membersData = PARAMS.mongoless ? sample : await dbh.getMembersbyYear(yearName);
const status = {
'Governors': [],
@@ -35,4 +34,7 @@ router.get('/:yearName?', async (req, res) => {
});
});
-module.exports = router;
+module.exports = {
+ route: '/members',
+ router
+};
diff --git a/routes/misc.js b/routes/misc.js
index 9443317f..bf50ecd2 100644
--- a/routes/misc.js
+++ b/routes/misc.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
router.get('/about', (req, res) => {
return res.renderFile('about.njk');
@@ -20,9 +19,6 @@ router.get('/prizes', (req, res) => {
return res.renderFile('events/prizes.njk', { prizes });
});
-router.get('/submissions', (req, res) => {
- return res.renderFile('submissions.njk');
-});
router.get('/success', (req, res) => {
// TODO: Rename this to /quiz/success
@@ -37,4 +33,7 @@ router.get('/terms', (req, res) => {
res.renderFile('terms.njk');
});
-module.exports = router;
+module.exports = {
+ route: '/',
+ router
+};
diff --git a/routes/newsletter.js b/routes/newsletter.js
index 0dd9f466..f2338b54 100644
--- a/routes/newsletter.js
+++ b/routes/newsletter.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const fs = require('fs').promises;
const path = require('path');
@@ -49,7 +48,7 @@ router.get('/:target?', (req, res) => {
const adjs = [letters[index - 1], letters[index + 1], letters[index]];
fs.readdir(path.join(__dirname, '../templates/newsletters', target)).then(files => {
const pages = files.filter(file => file.includes('#'));
- return res.renderFile(filepath, { adjs, pages, target });
+ return res.renderFile(filepath, { adjs, pages, target, targetpage: req.query.page });
});
}).catch(err => {
@@ -58,4 +57,7 @@ router.get('/:target?', (req, res) => {
});
});
-module.exports = router;
+module.exports = {
+ route: '/newsletters',
+ router
+};
diff --git a/routes/polls.js b/routes/polls.js
index 6ffa4cf3..6dd695cf 100644
--- a/routes/polls.js
+++ b/routes/polls.js
@@ -1,11 +1,11 @@
-const dbh = require('../database/handler');
-
const router = require('express').Router();
+const dbh = require('../database/handler');
+
// Route for opening poll or poll list
-router.get('/:pollId?', async (req, res) => {
- if (!req.loggedIn) return res.redirect('/login');
- const pollId = req.params.pollId;
+router.get('/', async (req, res) => {
+ if (!req.loggedIn) return res.loginRedirect(req, res);
+ const pollId = req.query.id;
const activePolls = await dbh.getActivePolls();
if (!pollId) return res.renderFile('poll_list.njk', {
activePolls,
@@ -31,16 +31,16 @@ router.post('/', async (req, res) => {
userId: req.user._id,
userChoice: req.body.userChoice
});
- return res.send({ success: true, message: "Successfully Voted" });
+ return res.send({ success: true, message: 'Successfully Voted' });
} catch (e) {
- return res.send({ success: false, message: "Something Went Wrong" });
+ return res.send({ success: false, message: 'Something Went Wrong' });
}
});
// Route for displaying poll results
-router.get('/results/:id?', async (req, res) => {
- if (!req.loggedIn) return res.redirect('/login');
- const pollId = req.params.id;
+router.get('/results', async (req, res) => {
+ if (!req.loggedIn) return res.loginRedirect(req, res);
+ const pollId = req.query.id;
if (!pollId) return res.notFound('No ID given.');
const activePolls = await dbh.getActivePolls();
const poll = activePolls.find(poll => poll._id === pollId);
@@ -59,4 +59,7 @@ router.get('/results/:id?', async (req, res) => {
});
});
-module.exports = router;
+module.exports = {
+ route: '/polls',
+ router
+};
diff --git a/routes/prizes.js b/routes/prizes.js
index 683a5973..38de4297 100644
--- a/routes/prizes.js
+++ b/routes/prizes.js
@@ -1,9 +1,11 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
router.get('/', (req, res) => {
const prizes = require('../src/rewards.json');
return res.renderFile('events/prizes.njk', { prizes });
});
-module.exports = router;
+module.exports = {
+ route: '/prizes',
+ router
+};
diff --git a/routes/profile.js b/routes/profile.js
index 7cb165ab..c52087ee 100644
--- a/routes/profile.js
+++ b/routes/profile.js
@@ -1,16 +1,15 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
router.get('/', async (req, res) => {
if (!req.loggedIn) return res.redirect('/');
- const user = await dbh.getUserStats(req.user._id);
+ const user = !PARAMS.jsonuser ? await dbh.getUserStats(req.user._id) : {};
return res.renderFile('profile.njk', {
name: req.user.name,
picture: req.user.picture,
- points: user.points,
- quizzes: user.quizData.map(stamp => {
+ points: user?.points,
+ quizzes: user?.quizData?.map(stamp => {
const months = [
'-',
'January',
@@ -33,4 +32,7 @@ router.get('/', async (req, res) => {
});
-module.exports = router;
+module.exports = {
+ route: '/profile',
+ router
+};
diff --git a/routes/py-events.js b/routes/py-events.js
index 867123ac..7b473f45 100644
--- a/routes/py-events.js
+++ b/routes/py-events.js
@@ -1,28 +1,30 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
router.get('/', (req, res) => {
- return res.renderFile("event-articles/py_events.njk");
+ return res.renderFile('event-articles/py_events.njk');
});
router.get('/qatq', (req, res) => {
- return res.renderFile("event-articles/qatq.njk");
+ return res.renderFile('event-articles/qatq.njk');
});
router.get('/seekers-quest', (req, res) => {
- return res.renderFile("event-articles/seekers-quest.njk");
+ return res.renderFile('event-articles/seekers-quest.njk');
});
router.get('/cosplay23', (req, res) => {
- return res.renderFile("event-articles/cosplay23.njk");
+ return res.renderFile('event-articles/cosplay23.njk');
});
router.get('/intrasoc', (req, res) => {
- return res.renderFile("event-articles/intrasoc.njk");
+ return res.renderFile('event-articles/intrasoc.njk');
});
router.get('/suzume', (req, res) => {
- return res.renderFile("event-articles/suzumetrip.njk");
+ return res.renderFile('event-articles/suzumetrip.njk');
});
-module.exports = router;
+module.exports = {
+ route: '/events',
+ router
+};
diff --git a/routes/quizzes.js b/routes/quizzes.js
index 09618176..c75cd2a4 100644
--- a/routes/quizzes.js
+++ b/routes/quizzes.js
@@ -1,5 +1,4 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
const dbh = PARAMS.mongoless ? {} : require('../database/handler');
@@ -168,4 +167,7 @@ router.post('/', async (req, res) => {
return res.renderFile('events/quiz_success.njk', { score: points[0], totalScore: points[1] });
});
-module.exports = router;
+module.exports = {
+ route: ['/quizzes', '/events'],
+ router
+};
diff --git a/routes/submission.js b/routes/submission.js
new file mode 100644
index 00000000..d8463c68
--- /dev/null
+++ b/routes/submission.js
@@ -0,0 +1,25 @@
+const router = require('express').Router();
+
+const dbh = require('../database/handler');
+
+router.get('/', (req, res) => {
+ if (PARAMS.mongoless) return res.status(403).renderFile('404.njk', {
+ pagetitle: 'Method not allowed',
+ message: 'This method is not permitted in mongoless mode.'
+ });
+ return res.renderFile('submissions.njk');
+});
+
+router.post('/', async (req, res) => {
+ if (PARAMS.mongoless) return res.status(403).send('Not allowed in mongoless');
+ // req.body = { email, name, member, link, proof, social }
+ const data = req.body;
+ const submission = await dbh.addSubmission(data);
+ // Add a Discord hook to send a message in case of new submission
+ return res.status(200).send('Success');
+});
+
+module.exports = {
+ route: '/submissions',
+ router
+};
diff --git a/routes/user.js b/routes/user.js
index ea8c4598..5b12bb29 100644
--- a/routes/user.js
+++ b/routes/user.js
@@ -1,14 +1,22 @@
-const express = require('express');
-const router = express.Router();
+const router = require('express').Router();
router.get('/login', (req, res) => {
if (req.loggedIn) return res.redirect('/');
- res.renderFile('login.njk');
+ return res.renderFile('login.njk');
});
router.get('/logout', (req, res) => {
- if (!req.loggedIn) return res.redirect('/login');
+ if (!req.loggedIn) return res.loginRedirect(req, res);
return req.logout(() => res.redirect('/'));
});
-module.exports = router;
+router.get('/logged-in', (req, res) => {
+ const redirectRoute = req.cookies.redirect.path ?? '/';
+ if (req.cookies.redirect) res.clearCookie('redirect');
+ return res.redirect(redirectRoute);
+});
+
+module.exports = {
+ route: '/',
+ router
+};
diff --git a/src/env.js b/src/env.js
index 30cfb09e..c1698928 100644
--- a/src/env.js
+++ b/src/env.js
@@ -8,9 +8,10 @@ const aliases = {
p: 'prod',
q: 'quiz',
u: 'userless',
- t: 'test'
+ t: 'test',
+ j: 'jsonuser'
};
-const validParams = ['dev', 'local', 'prod', 'mongoless', 'userless', 'quiz', 'test', 'maintenance'];
+const validParams = ['dev', 'local', 'prod', 'mongoless', 'userless', 'quiz', 'test', 'maintenance', 'jsonuser'];
if (!global.PARAMS) {
if (process.env['NODE_ENV'] === 'production') process.env.prod = true;
const shorts = new Set();
@@ -26,6 +27,7 @@ if (!global.PARAMS) {
}
exports.init = () => {
+
if (PARAMS.dev && PARAMS.prod) {
console.log('Production access is disabled with dev mode. Please use the testing DB instead.');
process.exit(1);
@@ -54,6 +56,7 @@ exports.init = () => {
PARAMS.userless = true;
console.log('Operating in userless mode.');
}
+ if (PARAMS.jsonuser) PARAMS.userless = true;
if (!PARAMS.prod) process.env.MONGO_URL = process.env.MONGO_TEST_URL;
if (PARAMS.local) process.env.MONGO_URL = 'mongodb://127.0.0.1/mask';
if (PARAMS.maintenance) PARAMS.mongoless = PARAMS.userless = true;
diff --git a/src/mask.js b/src/mask.js
index d856f331..cf1aecb9 100644
--- a/src/mask.js
+++ b/src/mask.js
@@ -10,8 +10,7 @@ const path = require('path');
global.Tools = require('./tools.js');
const DB = require('../database/database.js');
const PORT = process.env.PORT ?? 6969;
-const route = require("./route.js");
-const socketio = require('socket.io')();
+const route = require('./route.js');
const initMiddleware = require('./middleware.js');
global.app = express();
@@ -28,15 +27,12 @@ if (PARAMS.maintenance) app.use((req, res) => res.renderFile('under_maintenance.
else route(app, nunjEnv);
const server = http.createServer(app);
-global.io = socketio.listen(server);
-
-require('./socket.js');
server.listen(PORT, () => {
if (!PARAMS.test) console.log(`The MASK server's up at http://localhost:${PORT}/`);
});
-const sass = childProcess.exec(`npx sass assets${PARAMS.dev ? ' --watch' : ''} --no-source-map --style compressed`);
+const sass = childProcess.exec(`npx sass assets${PARAMS.dev ? ' --watch' : ''} --no-source-map --style=compressed`);
exports.ready = () => waitForDB;
diff --git a/src/middleware.js b/src/middleware.js
index 196e4452..806d3582 100644
--- a/src/middleware.js
+++ b/src/middleware.js
@@ -6,6 +6,7 @@ const session = require('express-session');
const fs = require('fs').promises;
const passport = require('passport');
const path = require('path');
+const sampleJsonUser = require('./samples/user.json');
const login = require('./login.js');
@@ -13,7 +14,13 @@ module.exports = function setMiddleware (app) {
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
-
+ if (PARAMS.jsonuser) {
+ app.use((req, res, next) => {
+ req.user = sampleJsonUser;
+ req.loggedIn = true;
+ next();
+ });
+ }
if (!PARAMS.userless) {
app.use(session({
secret: process.env.SESSION_SECRET,
@@ -38,15 +45,22 @@ module.exports = function setMiddleware (app) {
// Pre-routing
if (!PARAMS.userless) {
app.get('/login/federated/google', passport.authenticate('google'));
- app.get('/oauth2/redirect/google', passport.authenticate('google', {
- successReturnToOrRedirect: '/',
- failureRedirect: '/login'
- }));
+
+ app.get('/oauth2/redirect/google', (req, res, next) => {
+ passport.authenticate('google', {
+ successReturnToOrRedirect: '/logged-in',
+ failureRedirect: '/login'
+ })(req, res, next);
+ });
}
app.use('/assets', express.static(path.join(__dirname, '..', 'assets')));
app.use((req, res, next) => {
+ res.loginRedirect = (req, res) => {
+ res.cookie('redirect', { path: req.originalUrl, setPath: false });
+ return res.redirect('/login');
+ };
res.renderFile = (files, ctx) => {
if (!Array.isArray(files)) files = [files];
return res.render(path.join(__dirname, '../templates', ...files), ctx);
@@ -73,7 +87,11 @@ module.exports = function setMiddleware (app) {
res.locals.userless = PARAMS.userless;
res.locals.mongoless = PARAMS.mongoless;
res.locals.quizFlag = PARAMS.quiz;
+ res.locals.jsonuser = PARAMS.jsonuser;
req.loggedIn = res.locals.loggedIn = Boolean(req.user);
next();
});
+
};
+
+
diff --git a/src/route.js b/src/route.js
index cb7727c5..fcd7593a 100644
--- a/src/route.js
+++ b/src/route.js
@@ -1,68 +1,19 @@
-const checkerRouter = require("../routes/checker");
-const corsProxyRouter = require("../routes/corsProxy");
-const govPortalRouter = require("../routes/govportal");
-const gitHookRouter = require("../routes/git-hook");
-const homeRouter = require("../routes/home");
-const liveRouter = require("../routes/live");
-const mediaRouter = require("../routes/media");
-const membersRouter = require("../routes/members");
-const miscRouter = require("../routes/misc");
-const newsletterRouter = require("../routes/newsletter");
-const pollRouter = require("../routes/polls");
+const fs = require('fs').promises;
+const path = require('path');
-const profileRouter = require("../routes/profile");
-const quizzesRouter = require("../routes/quizzes");
-const userRouter = require("../routes/user");
-const eventsRouter = require("../routes/py-events");
-
-function link (app, nunjEnv) {
- const smallerRoutes = ["/about", "/apply", "/blog", "/prizes", "/submissions", "/success", "/privacy", "/terms"];
- const userRoutes = ["/login", "/logout"];
- const mediaRoutes = ["/art", "/videos"];
-
- app.use(async (_, __, next) => {
+async function link (app, nunjEnv) {
+ app.use(async (req, res, next) => {
await new Promise(r => r());
next();
});
- app.use('/', (req, res, next) => {
- if (req.url in smallerRoutes) {
- next();
- } else {
- next('route');
- }
- }, miscRouter);
-
- app.use('/', (req, res, next) => {
- if (req.url in userRoutes) {
- next();
- } else {
- next('route');
- }
- }, userRouter);
-
- app.use('/', (req, res, next) => {
- if (req.url in mediaRoutes) {
- next();
- } else {
- next('route');
- }
- }, mediaRouter);
-
+ // readdir and use routers like a madman
+ const routerModules = (await fs.readdir(path.join(__dirname, '../routes'))).filter(file => file.endsWith('.js'));
+ routerModules.forEach(module => {
+ const { route, router } = require(`../routes/${module}`);
+ app.use(route, router);
+ });
- app.use('/checker', checkerRouter);
- app.use('/corsProxy', corsProxyRouter);
- app.use('/gov-portal', govPortalRouter);
- app.use('/git-hook', gitHookRouter);
- app.use('/', homeRouter);
- app.use('/home', homeRouter);
- app.use('/live', liveRouter);
- app.use('/members', membersRouter);
- app.use('/newsletters', newsletterRouter);
- app.use('/polls', pollRouter);
- app.use('/profile', profileRouter);
- app.use('/events', eventsRouter);
- app.use(['/quizzes', '/events'], quizzesRouter);
app.use('/rebuild', (req, res) => {
nunjEnv.loaders.forEach(loader => loader.cache = {});
['./rewards.json'].forEach(cache => delete require.cache[require.resolve(cache)]);
@@ -76,7 +27,7 @@ function link (app, nunjEnv) {
app.use((req, res, next) => {
// If propagation hasn't stopped, switch to GET!
- if (req.method === "POST") {
+ if (req.method === 'POST') {
return res.redirect(req.url);
}
next();
@@ -90,9 +41,10 @@ function link (app, nunjEnv) {
if (PARAMS.dev) console.error(err.stack);
// Make POST errors show only the data, and GET errors show the page with the error message
res.status(500);
- if (req.method === "GET")
- res.renderFile("404.njk", {
- message: "Server error! This may or may not be due to invalid input."
+ if (req.method === 'GET')
+ res.renderFile('404.njk', {
+ message: 'Server error! This may or may not be due to invalid input.',
+ pagetitle: 'Error'
});
else res.send(err.toString());
});
diff --git a/src/samples/user.json b/src/samples/user.json
new file mode 100644
index 00000000..25038760
--- /dev/null
+++ b/src/samples/user.json
@@ -0,0 +1,7 @@
+{
+ "_id": "696969696969696969420",
+ "name": "MASK user",
+ "picture": "https://lh3.googleusercontent.com/a/ALm5wu2RSxfT5t7kiQhkIGaUw9WvknvNP-1ZEqAlcEgTSg=s96-c",
+ "__v": 0,
+ "permissions": []
+}
diff --git a/src/socket.js b/src/socket.js
deleted file mode 100644
index 817bd31b..00000000
--- a/src/socket.js
+++ /dev/null
@@ -1,4 +0,0 @@
-io.on('connection', socket => {
- if (socket.handshake.query.userId) socket.userId = socket.handshake.query.userId;
- socket.join('waiting-for-live-quiz');
-});
diff --git a/src/teams.json b/src/teams.json
index ebd0a2c4..9806ec1f 100644
--- a/src/teams.json
+++ b/src/teams.json
@@ -60,5 +60,27 @@
"name": "WebDev",
"icon": "webdev"
}
+ },
+ "2023" : {
+ "a": {
+ "name": "AMV & Music",
+ "icon": "amv"
+ },
+ "d": {
+ "name": "Design & Arts",
+ "icon": "design"
+ },
+ "n": {
+ "name": "Media & Newsletter",
+ "icon": "newsletter"
+ },
+ "q": {
+ "name": "Quiz",
+ "icon": "quiz"
+ },
+ "w": {
+ "name": "WebDev",
+ "icon": "webdev"
+ }
}
-}
\ No newline at end of file
+}
diff --git a/templates/404.njk b/templates/404.njk
index 8d97319e..376f9878 100644
--- a/templates/404.njk
+++ b/templates/404.njk
@@ -1,10 +1,11 @@
-{% extends "_base.njk" %}
+{% extends '_base.njk' %}
{% set thispage = '404' %}
-{% set pagetitle = '404' %}
+{% set pagetitle = pagetitle if pagetitle else '404' %}
+{% set pagedesc = 'Error: Resource not found' %}
{% block pagecontent %}