├── Note_rn
├── screens
│ ├── Community.js
│ ├── Subsciption.js
│ ├── Home.js
│ ├── Cs.js
│ ├── Py.js
│ ├── ChatScreen.js
│ ├── Welcome.js
│ ├── Login.js
│ └── Signin.js
├── components
│ ├── Custom_card.js
│ ├── Button.js
│ ├── Categories.js
│ └── Card.js
├── link.txt
├── assets
│ ├── aa.gif
│ ├── nn.mp4
│ ├── aaa.gif
│ ├── icon.png
│ ├── favicon.png
│ ├── splash.png
│ ├── welcome.png
│ ├── adaptive-icon.png
│ ├── loading.json
│ └── login_animation.json
├── babel.config.js
├── .gitignore
├── app.json
├── fireconfig.js
├── package.json
└── App.js
├── backend_rn
├── .gitignore
├── vercel.json
├── controllers
│ ├── note
│ │ ├── all.js
│ │ ├── all2.js
│ │ ├── new.js
│ │ └── newcs.js
│ └── auth
│ │ ├── id.js
│ │ ├── payment.js
│ │ ├── n-password.js
│ │ ├── login.js
│ │ ├── signin.js
│ │ └── forgot.js
├── db.js
├── models
│ ├── note.js
│ ├── note2.js
│ └── User.js
├── router
│ ├── Note.js
│ └── auth.js
├── index.js
├── package.json
├── middleware
│ └── fetchUser.js
└── yarn.lock
└── README.md
/Note_rn/screens/Community.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Note_rn/components/Custom_card.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Note_rn/screens/Subsciption.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/backend_rn/.gitignore:
--------------------------------------------------------------------------------
1 | .vercel
2 | /node_modules
--------------------------------------------------------------------------------
/Note_rn/link.txt:
--------------------------------------------------------------------------------
1 | https://backendrn-production.up.railway.app/api/user/login
--------------------------------------------------------------------------------
/Note_rn/assets/aa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/aa.gif
--------------------------------------------------------------------------------
/Note_rn/assets/nn.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/nn.mp4
--------------------------------------------------------------------------------
/backend_rn/vercel.json:
--------------------------------------------------------------------------------
1 | { "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/" }] }
--------------------------------------------------------------------------------
/Note_rn/assets/aaa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/aaa.gif
--------------------------------------------------------------------------------
/Note_rn/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/icon.png
--------------------------------------------------------------------------------
/Note_rn/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/favicon.png
--------------------------------------------------------------------------------
/Note_rn/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/splash.png
--------------------------------------------------------------------------------
/Note_rn/assets/welcome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/welcome.png
--------------------------------------------------------------------------------
/Note_rn/assets/adaptive-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Adityaadpandey/GENCO/HEAD/Note_rn/assets/adaptive-icon.png
--------------------------------------------------------------------------------
/Note_rn/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | presets: ['babel-preset-expo'],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/backend_rn/controllers/note/all.js:
--------------------------------------------------------------------------------
1 | const PyNote = require('../../models/note');
2 |
3 | const get = async (req, res) => {
4 | try {
5 | const note = await PyNote.find({});
6 | res.json(note);
7 | ``;
8 | } catch (error) {
9 | console.error(error.message);
10 | res.status(500).send("Internal Server Error");
11 | }
12 | }
13 | module.exports = get;
--------------------------------------------------------------------------------
/backend_rn/controllers/note/all2.js:
--------------------------------------------------------------------------------
1 | const CssNote = require('../../models/note2');
2 |
3 | const get2 = async (req, res) => {
4 | try {
5 | const note = await CssNote.find({});
6 | res.json(note);
7 | ``;
8 | } catch (error) {
9 | console.error(error.message);
10 | res.status(500).send("Internal Server Error");
11 | }
12 | }
13 | module.exports = get2;
--------------------------------------------------------------------------------
/backend_rn/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | const MONGO_URI = `mongodb+srv://Aditya:adpandey@cluster0.h40tx.mongodb.net/Note_rn?retryWrites=true&w=majority`;
4 |
5 |
6 | mongoose.connect(MONGO_URI, {
7 | useNewUrlParser: true,
8 | useUnifiedTopology: true,
9 | })
10 | .then(() => {
11 | console.log('Connected to MongoDB');
12 | })
13 | .catch((error) => {
14 | console.error('Error connecting to MongoDB:', error);
15 | });
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/id.js:
--------------------------------------------------------------------------------
1 | const User = require("../../models/User");
2 |
3 |
4 | const id = async(req, res) => {
5 | try {
6 | let userId = req.user.id;
7 | const user = await User.findById(userId).select("-password");
8 | // const user1 = user.("-resetToken")
9 | // const user2 = user1.select("-expireToken")
10 | res.send(user);
11 | } catch (error) {
12 | console.log(error.message);
13 | res.status(500).send("Enternal sever error");
14 | }
15 | }
16 |
17 | module.exports = id;
--------------------------------------------------------------------------------
/backend_rn/models/note.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const { Schema } = mongoose;
3 |
4 | const NoteSchema = new Schema({
5 | user: {
6 | type: mongoose.Schema.Types.ObjectId,
7 | ref: 'user',
8 | },
9 | title: {
10 | type: String,
11 | required: true,
12 |
13 | },
14 | content: {
15 | type: String,
16 | required: true,
17 |
18 | }
19 |
20 |
21 |
22 | })
23 | const PyNote = mongoose.model('PyNote', NoteSchema);
24 | module.exports = PyNote;
--------------------------------------------------------------------------------
/backend_rn/models/note2.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const { Schema } = mongoose;
3 |
4 | const NoteSchema = new Schema({
5 | user: {
6 | type: mongoose.Schema.Types.ObjectId,
7 | ref: 'user',
8 | },
9 | title: {
10 | type: String,
11 | required: true,
12 |
13 | },
14 | content: {
15 | type: String,
16 | required: true,
17 |
18 | }
19 |
20 |
21 |
22 | })
23 | const CssNote = mongoose.model('CssNote', NoteSchema);
24 | module.exports = CssNote;
--------------------------------------------------------------------------------
/Note_rn/.gitignore:
--------------------------------------------------------------------------------
1 | # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
2 |
3 | # dependencies
4 | node_modules/
5 |
6 | # Expo
7 | .expo/
8 | dist/
9 | web-build/
10 |
11 | # Native
12 | *.orig.*
13 | *.jks
14 | *.p8
15 | *.p12
16 | *.key
17 | *.mobileprovision
18 |
19 | # Metro
20 | .metro-health-check*
21 |
22 | # debug
23 | npm-debug.*
24 | yarn-debug.*
25 | yarn-error.*
26 |
27 | # macOS
28 | .DS_Store
29 | *.pem
30 |
31 | # local env files
32 | .env*.local
33 |
34 | # typescript
35 | *.tsbuildinfo
36 |
--------------------------------------------------------------------------------
/backend_rn/router/Note.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const { body, validationResult } = require("express-validator");
4 | const get = require("../controllers/note/all");
5 | const add = require("../controllers/note/new");
6 | const add2 = require("../controllers/note/newcs");
7 | const get2 = require("../controllers/note/all2");
8 |
9 | router.get("/fetchallpy",get );
10 | router.get("/fetchallcss",get2 );
11 |
12 |
13 |
14 | router.post("/addpy", add);
15 | router.post("/addcs", add2);
16 |
17 |
18 | module.exports = router;
--------------------------------------------------------------------------------
/backend_rn/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const app = express();
3 | var cors = require('cors');
4 |
5 | require('./db')
6 |
7 | const PORT = process.env.PORT || 5000;
8 |
9 | app.use(express.json());
10 | app.use(cors())
11 |
12 | // Avialable Route
13 | app.get('/', (req, res) => {
14 | res.send('Hello Owner ')
15 | })
16 | // app.use('/api/auth',require('./routes/auth'))
17 |
18 | app.use('/api/note', require('./router/Note'))
19 | app.use('/api/user', require('./router/auth'))
20 |
21 | app.listen(PORT, () => {
22 | console.log(`Server is listening on port ${PORT}`);
23 | });
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/payment.js:
--------------------------------------------------------------------------------
1 | const User = require('../../models/User');
2 |
3 | const paid = async(req, res) => {
4 | try {
5 |
6 | let userId = req.user.id;
7 | const user = await User.findByIdAndUpdate(userId, { last_payment: new Date(), next_payment: new Date(Date.now() + 3600000*24*30) });
8 | res.json({ message: "Payment Successful" });
9 |
10 |
11 |
12 |
13 | } catch (error) {
14 | console.log(error.message);
15 | res.status(500).send("Enternal sever error");
16 | }
17 | }
18 |
19 | module.exports = paid;
--------------------------------------------------------------------------------
/backend_rn/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend-agh",
3 | "version": "1.0.0",
4 | "description": "backend for the website and also for the booking purpose",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "nodemon index.js"
8 | },
9 | "author": "Aditya Pandey",
10 | "license": "ISC",
11 | "dependencies": {
12 | "bcryptjs": "^2.4.3",
13 | "cors": "^2.8.5",
14 | "express": "^4.19.2",
15 | "express-validator": "^7.2.0",
16 | "jsonwebtoken": "^9.0.2",
17 | "mongoose": "^8.5.3",
18 | "nodemailer": "^6.9.14"
19 | },
20 | "devDependencies": {
21 | "nodemon": "^3.1.4"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Note_rn/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "notessss",
4 | "slug": "notessss",
5 | "version": "1.0.0",
6 | "orientation": "portrait",
7 | "icon": "./assets/icon.png",
8 | "userInterfaceStyle": "dark",
9 | "splash": {
10 | "image": "./assets/splash.png",
11 | "resizeMode": "contain",
12 | "backgroundColor": "#A9A9A9"
13 | },
14 | "ios": {
15 | "supportsTablet": true
16 | },
17 | "android": {
18 | "adaptiveIcon": {
19 | "foregroundImage": "./assets/adaptive-icon.png",
20 | "backgroundColor": "#A9A9A9"
21 | }
22 | },
23 | "web": {
24 | "favicon": "./assets/favicon.png"
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/backend_rn/middleware/fetchUser.js:
--------------------------------------------------------------------------------
1 | const jwt = require("jsonwebtoken");
2 | const JWT_SECRECT = "Aditya";
3 |
4 | const fetchUser =(req, res, next) =>{
5 | // get the user from jwt server and id to req object
6 | const token = req.header('auth-token');
7 | if (!token){
8 | res.status(401).send({error:"Please authenticate using a valid token"})
9 | }
10 | try {
11 | const data = jwt.verify(token, JWT_SECRECT);
12 | req.user = data.user;
13 | // res.json(data);
14 | // req.send(req.user);
15 | next()
16 | } catch (error) {
17 | res.status(401).send({error:"Please authenticate using a valid token"})
18 | }
19 |
20 | }
21 |
22 | module.exports = fetchUser;
--------------------------------------------------------------------------------
/Note_rn/fireconfig.js:
--------------------------------------------------------------------------------
1 | import firebase from 'firebase/app';
2 | import 'firebase/auth';
3 | import 'firebase/firestore';
4 | import 'firebase/storage';
5 |
6 | const firebaseConfig = {
7 | apiKey: "AIzaSyCoHtusUOKlicpu3EqxBPSKn47hM9qEFR4",
8 | authDomain: "project-5d1cd.firebaseapp.com",
9 | projectId: "project-5d1cd",
10 | storageBucket: "project-5d1cd.appspot.com",
11 | messagingSenderId: "1069248766217",
12 | appId: "1:1069248766217:web:86d9bc0239b1d5d46173d8",
13 | };
14 |
15 | if (!firebase.apps.length) {
16 | firebase.initializeApp(firebaseConfig);
17 | }
18 |
19 | const auth = firebase.auth();
20 | const db = firebase.firestore();
21 | const storage = firebase.storage();
22 |
23 | export { firebase, auth, db, storage };
24 |
--------------------------------------------------------------------------------
/Note_rn/components/Button.js:
--------------------------------------------------------------------------------
1 | // CustomButton.js
2 | import React from 'react';
3 | import { TouchableOpacity, Text, StyleSheet } from 'react-native';
4 |
5 | export default function Button({ title, onPress, color = '#007BFF', style = {}, textStyle = {} }) {
6 | return (
7 |
11 | {title}
12 |
13 | );
14 | }
15 |
16 | const styles = StyleSheet.create({
17 | button: {
18 | paddingVertical: 10,
19 | paddingHorizontal: 20,
20 | borderRadius: 5,
21 | alignItems: 'center',
22 | justifyContent: 'center',
23 | },
24 | buttonText: {
25 | color: '#fff',
26 | fontSize: 16,
27 | fontWeight: 'bold',
28 | },
29 | });
30 |
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/n-password.js:
--------------------------------------------------------------------------------
1 | const bcrypt = require('bcryptjs')
2 | const User = require("../../models/User");
3 |
4 |
5 | const newpass = async (req, res) => {
6 | const newPassword = req.body.password
7 | const sentToken = req.params.token
8 | await User.findOne({resetToken:sentToken, expireToken:{ $gt:Date.now()}})
9 | .then(user=>{
10 | if(!user){
11 | return res.status(422).json({error:"Try again session expired"})
12 | }
13 | bcrypt.hash(newPassword,12).then(hashedpassword=>{
14 | user.password = hashedpassword
15 | user.resetToken = undefined
16 | user.expireToken = undefined
17 | user.save().then((saveduser)=>{
18 | res.json({message:"password updated success"})
19 | })
20 | })
21 | }).catch(err=>{
22 | console.log(err)
23 | })
24 | }
25 |
26 | module.exports = newpass;
--------------------------------------------------------------------------------
/backend_rn/controllers/note/new.js:
--------------------------------------------------------------------------------
1 | const PyNote = require('../../models/note');
2 |
3 | const add = async (req, res) => {
4 | try {
5 | const {
6 | id,
7 | title,
8 | content,
9 | category,
10 | // user
11 |
12 | } = req.body;
13 |
14 | // If there are errors, return Bad request and the errors
15 | // const errors = validationResult(req);
16 | // if (!errors.isEmpty()) {
17 | // return res.status(400).json({ errors: errors.array() });
18 | // }
19 | const note = new PyNote({
20 | id,
21 | title,
22 | content,
23 | category,
24 | // user: req.user.id,
25 | // user: req.user._id,
26 | });
27 | const savedNote = await note.save();
28 |
29 | // res.json(savedNote);
30 | var json = JSON.stringify(savedNote);
31 |
32 | res.send(json);
33 |
34 | } catch (error) {
35 | console.error(error.message);
36 | res.status(500).send("Internal Server Error");
37 | }
38 | }
39 |
40 | module.exports = add;
--------------------------------------------------------------------------------
/backend_rn/controllers/note/newcs.js:
--------------------------------------------------------------------------------
1 | const CssNote = require('../../models/note2');
2 |
3 | const add2 = async (req, res) => {
4 | try {
5 | const {
6 | id,
7 | title,
8 | content,
9 | category,
10 | // user
11 |
12 | } = req.body;
13 |
14 | // If there are errors, return Bad request and the errors
15 | // const errors = validationResult(req);
16 | // if (!errors.isEmpty()) {
17 | // return res.status(400).json({ errors: errors.array() });
18 | // }
19 | const note = new CssNote({
20 | id,
21 | title,
22 | content,
23 | category,
24 | // user: req.user.id,
25 | // user: req.user._id,
26 | });
27 | const savedNote = await note.save();
28 |
29 | // res.json(savedNote);
30 | var json = JSON.stringify(savedNote);
31 |
32 | res.send(json);
33 |
34 | } catch (error) {
35 | console.error(error.message);
36 | res.status(500).send("Internal Server Error");
37 | }
38 | }
39 |
40 | module.exports = add2;
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | GENCO
2 |
3 | an application build using react-native, express, node js and MongoDb to help the students with learning through an integrated set of feautes ai supported tools.
4 |
5 | Frontend:
6 |
7 | Assets
8 |
9 | components
10 |
11 | - Button.js
12 | - Card.js
13 | - Categories.js
14 | - Custom_card.js
15 |
16 | Screens:
17 |
18 | - ChatScreen.js
19 | - Community.js
20 | - Cs.js
21 | - Home.js
22 | - Login.js
23 | - Py.js
24 | - Signin.js
25 | - Subsciption.js
26 | - Welcome.js
27 |
28 | - .gitignore -
29 | - App.js
30 | - app.json
31 | - babel.config.js
32 | - fireconfig.js
33 | - link.txt
34 | - package-lock.json
35 | - package.json
36 |
37 | Backend:
38 |
39 | Backend structure:
40 |
41 | controllers
42 |
43 | auth.js
44 |
45 | note.js
46 |
47 | middleware
48 |
49 | models
50 |
51 | user.js
52 |
53 | note.js
54 |
55 | router
56 |
57 | - .gitignore
58 | - db.js
59 | - index.js
60 | - package.json
61 | - vercel.json
62 | - yarn.lock
63 |
64 | `cd Note_rn`
65 |
66 | `npm i`
67 |
68 | `npm start`
69 |
70 | Similarly for Backend_rn
71 |
72 | `cd` Backend_rn
73 |
74 | `npm i`
75 |
76 | `npm test`
77 |
--------------------------------------------------------------------------------
/Note_rn/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "notessss",
3 | "version": "1.0.0",
4 | "main": "expo/AppEntry.js",
5 | "scripts": {
6 | "start": "expo start",
7 | "android": "expo start --android",
8 | "ios": "expo start --ios",
9 | "web": "expo start --web"
10 | },
11 | "dependencies": {
12 | "@react-native-google-signin/google-signin": "^12.2.1",
13 | "@react-navigation/drawer": "^6.7.2",
14 | "@react-navigation/native": "^6.1.18",
15 | "@react-navigation/stack": "^6.4.1",
16 | "expo": "~51.0.28",
17 | "expo-auth-session": "^5.5.2",
18 | "expo-image-picker": "^15.0.7",
19 | "expo-status-bar": "~1.12.1",
20 | "firebase": "^10.13.0",
21 | "lottie-ios": "^3.1.8",
22 | "lottie-react-native": "^6.7.2",
23 | "react": "18.2.0",
24 | "react-native": "0.74.5",
25 | "react-native-gifted-chat": "^2.6.0",
26 | "react-native-safe-area-context": "^4.10.9",
27 | "react-native-screens": "^3.34.0",
28 | "react-native-video": "^6.4.5",
29 | "uuid": "^10.0.0"
30 | },
31 | "devDependencies": {
32 | "@babel/core": "^7.20.0"
33 | },
34 | "private": true
35 | }
36 |
--------------------------------------------------------------------------------
/backend_rn/models/User.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const { Schema } = mongoose;
3 |
4 | const UserSchema = new Schema({
5 | name:{
6 | type: 'string',
7 | required: true,
8 | unique: true
9 | },
10 | img: {
11 | type: 'string',
12 | required: true,
13 | },
14 | email: {
15 | type: 'string',
16 | required : true,
17 | unique : true,
18 | },
19 | password:{
20 | type: 'string',
21 | required : true,
22 | },
23 | resetToken:{
24 | type: 'string',
25 | default: null
26 | },
27 | expireToken: {
28 | type: Date,
29 | default: null
30 | },
31 | last_payment: {
32 | type: 'string',
33 | default: null,
34 | },
35 | next_payment: {
36 | type: 'string',
37 | default: null,
38 | },
39 | google_token: {
40 | type: 'string',
41 | default: null,
42 | },
43 | date:{
44 | type: Date,
45 | default: Date.now,
46 | }
47 |
48 | })
49 | const User = mongoose.model('User',UserSchema);
50 | module.exports = User;
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/login.js:
--------------------------------------------------------------------------------
1 | const User = require("../../models/User");
2 | const bcrypt = require("bcryptjs");
3 | const jwt = require("jsonwebtoken");
4 | const JWT_SECRECT = "Aditya";
5 |
6 | const login = async (req, res) => {
7 | const { email, password } = req.body;
8 | try {
9 | let user = await User.findOne({ email });
10 | if (!user) {
11 | return res
12 | .status(404)
13 | .json({ errors: "Please try to login with correct Credential" });
14 | }
15 |
16 | const passwordCompare = await bcrypt.compare(password, user.password);
17 | if (!passwordCompare) {
18 | return res
19 | .status(404)
20 | .json({ errors: "Please try to login with correct Credential" });
21 | }
22 | const data = {
23 | user: {
24 | id: user.id,
25 | },
26 | };
27 | let userId = data.user.id;
28 | const user1 = await User.findById(userId).select("-password");
29 | const authtoken = jwt.sign(data, JWT_SECRECT);
30 | // console.log(jwtData)
31 | var success = true;
32 | res.json({ success,authtoken,img:user1.img,name:user1.name,id:data.user.id });
33 | // res.json(data.user);
34 | } catch (error) {
35 | console.log(error.message);
36 | res.status(500).send("Enternal sever error");
37 | }
38 | }
39 |
40 | module.exports = login;
41 |
--------------------------------------------------------------------------------
/Note_rn/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { NavigationContainer } from '@react-navigation/native';
3 | import { createStackNavigator } from '@react-navigation/stack';
4 | import Home from './screens/Home';
5 | import Login from './screens/Login';
6 | import Card from './components/Card'
7 | import Categories from './components/Categories'
8 | import Signin from './screens/Signin';
9 | import Welcome from './screens/Welcome';
10 | // import ChatScreen from './screens/ChatScreen';
11 | import Cs from './screens/Cs';
12 | import Py from './screens/Py';
13 |
14 | const Stack = createStackNavigator();
15 |
16 | export default function App({navigation}) {
17 | return (
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | {/* */}
26 |
27 |
28 |
29 |
30 |
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/signin.js:
--------------------------------------------------------------------------------
1 | const User = require("../../models/User");
2 | const bcrypt = require("bcryptjs");
3 | const jwt = require("jsonwebtoken");
4 | const JWT_SECRECT = "Aditya";
5 |
6 | const loged = async (req, res) => {
7 | let user = await User.findOne({ email: req.body.email });
8 |
9 | if (user) {
10 | return res
11 | .status(400)
12 | .json({ error: "Sorry a user with this email already exists." });
13 | }
14 | let name = await User.findOne({ name: req.body.name });
15 | if (name) {
16 | return res
17 | .status(400)
18 | .json({ error: "Sorry a user with this user-name already exists." });
19 | }
20 | try {
21 | // slating
22 | password = req.body.password;
23 | const salt = await bcrypt.genSalt(10);
24 | nPass = await bcrypt.hash(password, salt);
25 | // adding to the database
26 | var seed = Math.floor(Math.random() * 5000)
27 | var img = `https://avatars.dicebear.com/api/human/${seed}.svg`;
28 | user = await User.create({ name: req.body.name, email: req.body.email, password: nPass, img: img, });
29 | // to generate token
30 | const data = {
31 | user: {
32 | id: user.id,
33 | }
34 | }
35 | const token = jwt.sign(data, JWT_SECRECT);
36 | let success = true
37 | // sending the token
38 | res.json({ success, token, img, name: req.body.name}).status(200);
39 | } catch (error) {
40 | console.log(error);
41 | }
42 | }
43 |
44 | module.exports = loged;
45 |
--------------------------------------------------------------------------------
/Note_rn/assets/loading.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.7.6",
3 | "fr": 30,
4 | "ip": 0,
5 | "op": 120,
6 | "w": 200,
7 | "h": 200,
8 | "nm": "loading_animation",
9 | "ddd": 0,
10 | "assets": [],
11 | "layers": [
12 | {
13 | "ddd": 0,
14 | "ind": 0,
15 | "ty": 4,
16 | "nm": "Circle Layer",
17 | "sr": 1,
18 | "ks": {
19 | "o": { "a": 0, "k": 100, "ix": 11 },
20 | "r": { "a": 1, "k": [
21 | { "t": 0, "s": [0], "e": [360], "i": { "x": 0.5, "y": 0.5 }, "o": { "x": 0.5, "y": 0.5 } },
22 | { "t": 120, "s": [360], "e": [0], "i": { "x": 0.5, "y": 0.5 }, "o": { "x": 0.5, "y": 0.5 } }
23 | ], "ix": 10 },
24 | "p": { "a": 0, "k": [100, 100, 0], "ix": 2 },
25 | "a": { "a": 0, "k": [100, 100, 0], "ix": 1 },
26 | "s": { "a": 0, "k": [100, 100, 100], "ix": 6 }
27 | },
28 | "ao": 0,
29 | "shapes": [
30 | {
31 | "ty": "el",
32 | "p": { "a": 0, "k": [100, 100], "ix": 2 },
33 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
34 | "nm": "Circle Shape",
35 | "mn": "ADBE Vector Shape - Ellipse",
36 | "hd": false
37 | },
38 | {
39 | "ty": "st",
40 | "c": { "a": 0, "k": [1, 0, 0, 1], "ix": 3 },
41 | "o": { "a": 0, "k": 100, "ix": 4 },
42 | "w": { "a": 0, "k": 8, "ix": 5 },
43 | "lc": 1,
44 | "lj": 1,
45 | "nm": "Stroke",
46 | "mn": "ADBE Vector Graphic - Stroke",
47 | "hd": false
48 | }
49 | ],
50 | "ip": 0,
51 | "op": 120,
52 | "st": 0,
53 | "bm": 0
54 | }
55 | ],
56 | "markers": []
57 | }
58 |
--------------------------------------------------------------------------------
/backend_rn/router/auth.js:
--------------------------------------------------------------------------------
1 | // importing the modules for the routes
2 | const express = require("express");
3 | const router = express.Router();
4 | // const crypto = require('crypto')
5 | const {body} = require("express-validator");
6 | var fetchUser = require("../middleware/fetchUser");
7 | // const User = require("../models/User");
8 |
9 | // const jwt = require('jsonwebtoken')
10 |
11 | // requirement of the controllers
12 | const loged = require("../controllers/auth/signin");
13 | const login = require("../controllers/auth/login");
14 | const id = require("../controllers/auth/id");
15 | const forget = require("../controllers/auth/forgot");
16 | const newpass = require("../controllers/auth/n-password");
17 | const paid = require("../controllers/auth/payment");
18 |
19 |
20 |
21 | // this is to create a new user
22 | // using the loged controller
23 | router.post(
24 | "/signin",
25 | [
26 | body("name", "Enter a valid Name").isLength({ min: 3 }),
27 | body("email", "Enter a valid Email").isEmail(),
28 | body("password", "Password must be at least 5 characters").isLength({min: 5,}),],
29 | loged
30 | );
31 |
32 | // this is to login in the account
33 | // using the login controller
34 | router.post('/login', [
35 | body("password", "Password Cannot be blank").exists(),
36 | body("email", "Enter a valid Email").isEmail(),],
37 | login
38 | );
39 |
40 | // this is to get the user details
41 | // using the id controller
42 | router.get("/getuser", fetchUser, id);
43 |
44 | // this is to send the email to the user
45 | // using the forget controller
46 | router.post('/reset-password', forget);
47 |
48 | // this is to reset the password
49 | // using the newpass controller
50 | router.post('/new-password/:token', newpass)
51 |
52 |
53 | // this is to update the payment details
54 |
55 | router.post('/payment',fetchUser, paid)
56 |
57 |
58 | module.exports = router;
59 |
--------------------------------------------------------------------------------
/backend_rn/controllers/auth/forgot.js:
--------------------------------------------------------------------------------
1 | const User = require("../../models/User");
2 | const crypto = require("crypto");
3 | const nodemailer = require('nodemailer')
4 | // let aws = require("@aws-sdk/client-ses");
5 | // let { defaultProvider } = require("@aws-sdk/credential-provider-node");
6 | // const sendgridTransport = require('nodemailer-sendgrid-transport')
7 |
8 | var transporter = nodemailer.createTransport({
9 | service: 'gmail',
10 | auth: {
11 | user: 'adityapandeyadp@gmail.com',
12 | pass: 'jonyjony123'
13 | }
14 | });
15 |
16 | // const ses = new aws.SES({
17 | // apiVersion: "2010-12-01",
18 | // region: "us-east-1",
19 | // defaultProvider,
20 | // });
21 |
22 | // // create Nodemailer SES transporter
23 | // let transporter = nodemailer.createTransport({
24 | // SES: { ses, aws },
25 | // });
26 |
27 | const forget = async (req,res)=>{
28 | crypto.randomBytes(32,(err,buffer)=>{
29 | if(err){
30 | console.log(err)
31 | }
32 | const token = buffer.toString("hex")
33 | User.findOne({email:req.body.email})
34 | .then(user=>{
35 | if(!user){
36 | return res.status(422).json({error:"User dont exists with that email"})
37 | }
38 | user.resetToken = token
39 | user.expireToken = Date.now() + 3600000
40 | const host = 'http://localhost:5000'
41 | user.save().then((result)=>{
42 | transporter.sendMail({
43 | to:user.email,
44 | from:"adityapandeyadp@gmail.com",
45 | subject:"password reset",
46 | html:`
47 |
You requested for password reset
48 | click in this link to reset password
49 | `
50 | })
51 | res.json({message:"check your email"})
52 | })
53 |
54 | })
55 | })
56 | }
57 |
58 | module.exports = forget;
--------------------------------------------------------------------------------
/Note_rn/components/Categories.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Image, SafeAreaView, Dimensions, Text, View } from 'react-native';
2 | import React from 'react';
3 | import Button from './Button';
4 |
5 | const { width, height } = Dimensions.get('window');
6 |
7 |
8 | export default function Categories({ navigation }) {
9 | return (
10 |
11 |
12 |
13 | {/* Welcome to The n-Notes App */}
14 |
15 |
30 |
31 | );
32 | }
33 |
34 | const styles = StyleSheet.create({
35 |
36 | welcome: {
37 | flex: 1,
38 | backgroundColor: '#f8f8f8',
39 | justifyContent: 'center',
40 | alignItems: 'center',
41 | },
42 | wel_img: {
43 | width: width * 1,
44 | // height: height ,
45 | resizeMode: 'contain',
46 | marginBottom: 20,
47 | },
48 | wel_text: {
49 | fontSize: 24,
50 | fontWeight: 'bold',
51 | marginBottom: 30,
52 | textAlign: 'center',
53 | },
54 | italicText: {
55 | fontStyle: 'italic',
56 | color: '#555',
57 | marginBottom: 10,
58 | textTransform: 'uppercase',
59 | letterSpacing: 1,
60 | lineHeight: 30,
61 | },
62 | buttonContainer: {
63 | flexDirection: 'row',
64 | justifyContent: 'center',
65 | width: '80%',
66 | marginTop: 20,
67 | },
68 | button: {
69 | flex: 1,
70 | marginHorizontal: 10,
71 | },
72 | });
73 |
--------------------------------------------------------------------------------
/Note_rn/screens/Home.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Image, SafeAreaView, Dimensions, Text, View } from 'react-native';
2 | import React from 'react';
3 | import Button from '../components/Button';
4 |
5 | const { width, height } = Dimensions.get('window');
6 |
7 | const Home = ({ navigation }) => {
8 | return (
9 |
10 |
11 | Welcome to The n-Notes App
12 |
13 | navigation.navigate('Login')}
17 | color="green"
18 | textStyle={{ fontSize: 20 }}
19 | />
20 | navigation.navigate('Signin')}
24 | color="green"
25 | textStyle={{ fontSize: 20 }}
26 | />
27 |
28 |
29 | );
30 | }
31 |
32 | export default Home;
33 |
34 | const styles = StyleSheet.create({
35 | welcome: {
36 | flex: 1,
37 | backgroundColor: '#f8f8f8',
38 | justifyContent: 'center',
39 | alignItems: 'center',
40 | },
41 | wel_img: {
42 | width: width * 0.7,
43 | height: height * 0.3,
44 | resizeMode: 'contain',
45 | marginBottom: 20,
46 | },
47 | wel_text: {
48 | fontSize: 24,
49 | fontWeight: 'bold',
50 | marginBottom: 30,
51 | textAlign: 'center',
52 | },
53 | italicText: {
54 | fontStyle: 'italic',
55 | color: '#555',
56 | marginBottom: 10,
57 | textTransform: 'uppercase',
58 | letterSpacing: 1,
59 | lineHeight: 30,
60 | },
61 | buttonContainer: {
62 | flexDirection: 'row',
63 | justifyContent: 'center',
64 | width: '80%',
65 | marginTop: 20,
66 | },
67 | button: {
68 | flex: 1,
69 | marginHorizontal: 10,
70 | },
71 | });
72 |
--------------------------------------------------------------------------------
/Note_rn/assets/login_animation.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.7.6",
3 | "fr": 30,
4 | "ip": 0,
5 | "op": 100,
6 | "w": 100,
7 | "h": 100,
8 | "nm": "bouncing_ball",
9 | "ddd": 0,
10 | "assets": [
11 | {
12 | "id": "comp_0",
13 | "layers": [
14 | {
15 | "ddd": 0,
16 | "ind": 1,
17 | "ty": 4,
18 | "nm": "ball",
19 | "sr": 1,
20 | "ks": {
21 | "o": {
22 | "a": 0,
23 | "k": 100
24 | },
25 | "r": {
26 | "a": 0,
27 | "k": 0
28 | },
29 | "p": {
30 | "a": 1,
31 | "k": [
32 | {
33 | "i": {
34 | "x": 0.5,
35 | "y": 0.5
36 | },
37 | "o": {
38 | "x": 0.5,
39 | "y": 0.5
40 | },
41 | "t": 0,
42 | "s": [
43 | 50,
44 | 100,
45 | 0
46 | ],
47 | "e": [
48 | 50,
49 | 50,
50 | 0
51 | ]
52 | },
53 | {
54 | "t": 100,
55 | "s": [
56 | 50,
57 | 50,
58 | 0
59 | ]
60 | }
61 | ]
62 | },
63 | "a": {
64 | "a": 0,
65 | "k": [
66 | 50,
67 | 50,
68 | 0
69 | ]
70 | }
71 | },
72 | "shapes": [
73 | {
74 | "ty": "el",
75 | "s": {
76 | "a": 0,
77 | "k": [
78 | 50,
79 | 50
80 | ]
81 | },
82 | "p": {
83 | "a": 0,
84 | "k": [
85 | 50,
86 | 50
87 | ]
88 | },
89 | "nm": "ellipse",
90 | "hd": false
91 | }
92 | ],
93 | "ip": 0,
94 | "op": 100,
95 | "st": 0,
96 | "bm": 0
97 | }
98 | ]
99 | }
100 | ],
101 | "markers": []
102 | }
103 |
--------------------------------------------------------------------------------
/Note_rn/screens/Cs.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { View, Text, StyleSheet, Dimensions, FlatList } from 'react-native';
3 | import { GestureHandlerRootView } from 'react-native-gesture-handler';
4 | // import Swipeable from 'react-native-gesture-handler/Swipeable';
5 | // import data from './data.json';
6 |
7 | const { width, height } = Dimensions.get('window');
8 |
9 | export default function Card() {
10 | const [notes, setNotes] = useState([]);
11 |
12 | // useEffect(() => {
13 | // setNotes(data);
14 | // }, []);
15 |
16 | useEffect(() => {
17 | const url = "https://backendrn-production.up.railway.app/api/note/fetchallcss";
18 |
19 | const fetchData = async () => {
20 | try {
21 | const response = await fetch(url);
22 | const json = await response.json();
23 | // console.log(json);
24 | setNotes(json);
25 | } catch (error) {
26 | console.log("error", error);
27 | }
28 | };
29 |
30 | fetchData();
31 | }, []);
32 |
33 |
34 | const renderItem = ({ item }) => (
35 |
36 | {item.title}
37 | {item.content}
38 |
39 | );
40 |
41 | return (
42 |
43 | item.id}
47 | horizontal
48 | pagingEnabled
49 | showsHorizontalScrollIndicator={false}
50 | contentContainerStyle={styles.container}
51 | />
52 |
53 | );
54 | }
55 |
56 | const styles = StyleSheet.create({
57 | container: {
58 | alignItems: 'center',
59 | justifyContent: 'center',
60 | height,
61 | },
62 | card: {
63 | width: width * 0.8, // 80% of the screen width
64 | height: height * 0.7, // 50% of the screen height
65 | backgroundColor: '#fff',
66 | borderRadius: 10,
67 | justifyContent: 'center',
68 | alignItems: 'center',
69 | shadowColor: '#000',
70 | shadowOpacity: 0.2,
71 | shadowOffset: { width: 0, height: 2 },
72 | shadowRadius: 10,
73 | elevation: 5,
74 | marginHorizontal: width * 0.1, // Center the card horizontally
75 | },
76 | title: {
77 | fontSize: 24,
78 | fontWeight: 'bold',
79 | marginBottom: 10,
80 | },
81 | content: {
82 | fontSize: 18,
83 | textAlign: 'center',
84 | paddingHorizontal: 20,
85 | },
86 | });
87 |
--------------------------------------------------------------------------------
/Note_rn/screens/Py.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { View, Text, StyleSheet, Dimensions, FlatList } from 'react-native';
3 | import { GestureHandlerRootView } from 'react-native-gesture-handler';
4 | // import Swipeable from 'react-native-gesture-handler/Swipeable';
5 | // import data from './data.json';
6 |
7 | const { width, height } = Dimensions.get('window');
8 |
9 | export default function Card() {
10 | const [notes, setNotes] = useState([]);
11 |
12 | // useEffect(() => {
13 | // setNotes(data);
14 | // }, []);
15 |
16 | useEffect(() => {
17 | const url = "https://backendrn-production.up.railway.app/api/note/fetchallpy";
18 |
19 | const fetchData = async () => {
20 | try {
21 | const response = await fetch(url);
22 | const json = await response.json();
23 | // console.log(json);
24 | setNotes(json);
25 | } catch (error) {
26 | console.log("error", error);
27 | }
28 | };
29 |
30 | fetchData();
31 | }, []);
32 |
33 |
34 | const renderItem = ({ item }) => (
35 |
36 | {item.title}
37 | {item.content}
38 |
39 | );
40 |
41 | return (
42 |
43 | item.id}
47 | horizontal
48 | pagingEnabled
49 | showsHorizontalScrollIndicator={false}
50 | contentContainerStyle={styles.container}
51 | />
52 |
53 | );
54 | }
55 |
56 | const styles = StyleSheet.create({
57 | container: {
58 | alignItems: 'center',
59 | justifyContent: 'center',
60 | height,
61 | },
62 | card: {
63 | width: width * 0.8, // 80% of the screen width
64 | height: height * 0.7, // 50% of the screen height
65 | backgroundColor: '#fff',
66 | borderRadius: 10,
67 | justifyContent: 'center',
68 | alignItems: 'center',
69 | shadowColor: '#000',
70 | shadowOpacity: 0.2,
71 | shadowOffset: { width: 0, height: 2 },
72 | shadowRadius: 10,
73 | elevation: 5,
74 | marginHorizontal: width * 0.1, // Center the card horizontally
75 | },
76 | title: {
77 | fontSize: 24,
78 | fontWeight: 'bold',
79 | marginBottom: 10,
80 | },
81 | content: {
82 | fontSize: 18,
83 | textAlign: 'center',
84 | paddingHorizontal: 20,
85 | },
86 | });
87 |
--------------------------------------------------------------------------------
/Note_rn/components/Card.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { View, Text, StyleSheet, Dimensions, FlatList } from 'react-native';
3 | import { GestureHandlerRootView } from 'react-native-gesture-handler';
4 | // import Swipeable from 'react-native-gesture-handler/Swipeable';
5 | // import data from './data.json';
6 |
7 | const { width, height } = Dimensions.get('window');
8 |
9 | export default function Card() {
10 | const [notes, setNotes] = useState([]);
11 |
12 | // useEffect(() => {
13 | // setNotes(data);
14 | // }, []);
15 |
16 | useEffect(() => {
17 | const url = "https://backendrn-production.up.railway.app/api/note/fetchallnotes";
18 |
19 | const fetchData = async () => {
20 | try {
21 | const response = await fetch(url);
22 | const json = await response.json();
23 | // console.log(json);
24 | setNotes(json);
25 | } catch (error) {
26 | console.log("error", error);
27 | }
28 | };
29 |
30 | fetchData();
31 | }, []);
32 |
33 |
34 | const renderItem = ({ item }) => (
35 |
36 | {item.title}
37 | {item.content}
38 |
39 | );
40 |
41 | return (
42 |
43 | item.id}
47 | horizontal
48 | pagingEnabled
49 | showsHorizontalScrollIndicator={false}
50 | contentContainerStyle={styles.container}
51 | />
52 |
53 | );
54 | }
55 |
56 | const styles = StyleSheet.create({
57 | container: {
58 | alignItems: 'center',
59 | justifyContent: 'center',
60 | height,
61 | },
62 | card: {
63 | width: width * 0.8, // 80% of the screen width
64 | height: height * 0.7, // 50% of the screen height
65 | backgroundColor: '#fff',
66 | borderRadius: 10,
67 | justifyContent: 'center',
68 | alignItems: 'center',
69 | shadowColor: '#000',
70 | shadowOpacity: 0.2,
71 | shadowOffset: { width: 0, height: 2 },
72 | shadowRadius: 10,
73 | elevation: 5,
74 | marginHorizontal: width * 0.1, // Center the card horizontally
75 | },
76 | title: {
77 | fontSize: 24,
78 | fontWeight: 'bold',
79 | marginBottom: 10,
80 | },
81 | content: {
82 | fontSize: 18,
83 | textAlign: 'center',
84 | paddingHorizontal: 20,
85 | },
86 | });
87 |
--------------------------------------------------------------------------------
/Note_rn/screens/ChatScreen.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { View, StyleSheet, Button, TextInput, Platform } from 'react-native';
3 | import { GiftedChat } from 'react-native-gifted-chat';
4 | import { db, storage } from '../fireconfig';
5 | import * as ImagePicker from 'expo-image-picker';
6 |
7 | const ChatScreen = () => {
8 | const [messages, setMessages] = useState([]);
9 |
10 | useEffect(() => {
11 | const unsubscribe = db.collection('messages').orderBy('createdAt', 'desc')
12 | .onSnapshot(snapshot => {
13 | const fetchedMessages = snapshot.docs.map(doc => ({
14 | _id: doc.id,
15 | text: doc.data().text,
16 | createdAt: doc.data().createdAt.toDate(),
17 | user: {
18 | _id: doc.data().user._id,
19 | name: doc.data().user.name
20 | },
21 | }));
22 | setMessages(fetchedMessages);
23 | });
24 |
25 | return () => unsubscribe();
26 | }, []);
27 |
28 | const onSend = (newMessages = []) => {
29 | const { text, _id, createdAt, user } = newMessages[0];
30 | db.collection('messages').add({
31 | text,
32 | createdAt,
33 | user,
34 | });
35 | };
36 |
37 | const uploadImage = async () => {
38 | let result = await ImagePicker.launchImageLibraryAsync({
39 | mediaTypes: ImagePicker.MediaTypeOptions.Images,
40 | allowsEditing: true,
41 | aspect: [4, 3],
42 | quality: 1,
43 | });
44 |
45 | if (!result.canceled) {
46 | const uri = result.uri;
47 | const response = await fetch(uri);
48 | const blob = await response.blob();
49 | const filename = uri.split('/').pop();
50 | const ref = storage.ref().child(filename);
51 | await ref.put(blob);
52 | const url = await ref.getDownloadURL();
53 | db.collection('messages').add({
54 | text: `Image uploaded: ${url}`,
55 | createdAt: new Date(),
56 | user: {
57 | _id: 'system',
58 | name: 'System'
59 | },
60 | });
61 | }
62 | };
63 |
64 | return (
65 |
66 | onSend(messages)}
69 | user={{
70 | _id: 'user1',
71 | name: 'User 1'
72 | }}
73 | />
74 |
75 |
76 | );
77 | };
78 |
79 | const styles = StyleSheet.create({
80 | container: {
81 | flex: 1,
82 | justifyContent: 'center',
83 | },
84 | });
85 |
86 | export default ChatScreen;
87 |
--------------------------------------------------------------------------------
/Note_rn/screens/Welcome.js:
--------------------------------------------------------------------------------
1 | import { StyleSheet, Image, SafeAreaView, Dimensions, Text, View } from 'react-native';
2 | import React from 'react';
3 | import Button from '../components/Button';
4 |
5 | const { width, height } = Dimensions.get('window');
6 |
7 | const Welcome = ({ navigation }) => {
8 | return (
9 |
10 |
11 | Welcome to The GENCO
12 |
13 | navigation.navigate('Categories')}
17 | color="green"
18 | textStyle={{ fontSize: 20 }}
19 | />
20 | navigation.navigate('Signin')}
24 | color="green"
25 | textStyle={{ fontSize: 20 }}
26 | />
27 |
28 | navigation.navigate('Login')}
32 | color="red"
33 | textStyle={{ fontSize: 20 }}
34 | /> navigation.navigate('Signin')}
38 | color="red"
39 | textStyle={{ fontSize: 20 }}
40 | />
41 |
42 |
43 | );
44 | }
45 |
46 | export default Welcome;
47 |
48 | const styles = StyleSheet.create({
49 | welcome: {
50 | flex: 1,
51 | backgroundColor: '#f8f8f8',
52 | justifyContent: 'center',
53 | alignItems: 'center',
54 | },
55 | wel_img: {
56 | width: width * 1,
57 | // height: height ,
58 | resizeMode: 'contain',
59 | marginBottom: 20,
60 | },
61 | wel_text: {
62 | fontSize: 24,
63 | // fontWeight: 'bold',
64 | marginBottom: 30,
65 | textAlign: 'center',
66 | },
67 | italicText: {
68 | fontStyle: 'italic',
69 | fontWeight:"condensedBold",
70 | color: '#555',
71 | marginBottom: 10,
72 | textTransform: 'uppercase',
73 | letterSpacing: 1,
74 | lineHeight: 30,
75 | },
76 | buttonContainer: {
77 | flexDirection: 'row',
78 | justifyContent: 'center',
79 | width: '90%',
80 | marginTop: 20,
81 | marginBottom: 20,
82 | },
83 | buttonContainer1: {
84 | flexDirection: 'row',
85 | justifyContent: 'center',
86 | width: '90%',
87 | marginTop: 50,
88 | // marginBottom: 40,
89 | },
90 | button: {
91 | flex: 1,
92 | marginHorizontal: 10,
93 | },
94 | });
95 |
--------------------------------------------------------------------------------
/Note_rn/screens/Login.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import {
3 | StyleSheet,
4 | View,
5 | Text,
6 | TextInput,
7 | TouchableOpacity,
8 | Dimensions,
9 | SafeAreaView,
10 | ScrollView,
11 | KeyboardAvoidingView,
12 | Platform,
13 | Keyboard,
14 | TouchableWithoutFeedback,
15 | Animated
16 | } from 'react-native';
17 | import LottieView from 'lottie-react-native';
18 |
19 | const { width, height } = Dimensions.get('window');
20 |
21 | const Login = ({ navigation }) => {
22 | const [email, setEmail] = useState('');
23 | const [password, setPassword] = useState('');
24 | const [animation] = useState(new Animated.Value(0)); // For button animation
25 |
26 | useEffect(() => {
27 | Animated.timing(animation, {
28 | toValue: 1,
29 | duration: 1000,
30 | useNativeDriver: true,
31 | }).start();
32 | }, []);
33 |
34 | const handleLogin = async () => {
35 | try {
36 | const response = await fetch('https://backendrn-production.up.railway.app/api/user/login', {
37 | method: 'POST',
38 | headers: {
39 | 'Content-Type': 'application/json',
40 | },
41 | body: JSON.stringify({
42 | "email": email,
43 | "password": password
44 | }),
45 | });
46 | const json = await response.json();
47 | if (json.success) {
48 | navigation.navigate('Card');
49 | } else {
50 | alert('Login failed');
51 | }
52 | } catch (error) {
53 | console.log(error);
54 | }
55 | };
56 |
57 | const animatedStyle = {
58 | opacity: animation,
59 | transform: [{ scale: animation }],
60 | };
61 |
62 | return (
63 |
64 |
65 |
69 |
70 |
71 |
77 |
78 |
79 | Login
80 |
81 |
89 |
96 |
97 |
98 | Sign In
99 |
100 |
101 |
102 |
103 |
104 |
105 | );
106 | };
107 |
108 | const styles = StyleSheet.create({
109 | container: {
110 | flex: 1,
111 | backgroundColor: '#f8f8f8',
112 | },
113 | keyboardAvoidingView: {
114 | flex: 1,
115 | },
116 | scrollContainer: {
117 | flexGrow: 1,
118 | justifyContent: 'flex-end', // Push content to bottom
119 | alignItems: 'center',
120 | paddingHorizontal: 20,
121 | },
122 | animationWrapper: {
123 | position: 'absolute',
124 | top: 0,
125 | left: 0,
126 | right: 0,
127 | height: height * 0.5, // Covering half of the screen
128 | overflow: 'hidden',
129 | },
130 | animation: {
131 | width: '100%',
132 | height: '100%',
133 | backgroundColor: 'transparent',
134 | },
135 | formContainer: {
136 | width: '100%',
137 | backgroundColor: '#fff',
138 | borderRadius: 10,
139 | padding: 20,
140 | elevation: 5,
141 | shadowColor: '#000',
142 | shadowOpacity: 0.2,
143 | shadowOffset: { width: 0, height: 2 },
144 | shadowRadius: 10,
145 | marginBottom: 30,
146 | },
147 | title: {
148 | fontSize: 30,
149 | fontWeight: 'bold',
150 | color: '#333',
151 | marginBottom: 20,
152 | textAlign: 'center',
153 | },
154 | inputContainer: {
155 | marginBottom: 20,
156 | },
157 | input: {
158 | height: 50,
159 | borderColor: '#ddd',
160 | borderWidth: 1,
161 | borderRadius: 10,
162 | paddingHorizontal: 15,
163 | marginBottom: 10,
164 | backgroundColor: '#fff',
165 | fontSize: 16,
166 | },
167 | button: {
168 | backgroundColor: '#007BFF',
169 | borderRadius: 10,
170 | paddingVertical: 15,
171 | alignItems: 'center',
172 | },
173 | buttonText: {
174 | color: '#fff',
175 | fontSize: 18,
176 | fontWeight: 'bold',
177 | },
178 | });
179 |
180 |
181 | export default Login;
--------------------------------------------------------------------------------
/Note_rn/screens/Signin.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import {
3 | View,
4 | Text,
5 | TextInput,
6 | TouchableOpacity,
7 | StyleSheet,
8 | Alert,
9 | Dimensions,
10 | KeyboardAvoidingView,
11 | Platform,
12 | ScrollView,
13 | ActivityIndicator,
14 | } from 'react-native';
15 | import LottieView from 'lottie-react-native';
16 |
17 | const { width } = Dimensions.get('window');
18 |
19 | export default function Signin({ navigation }) {
20 | const [name, setName] = useState('');
21 | const [email, setEmail] = useState('');
22 | const [password, setPassword] = useState('');
23 | const [isSubmitting, setIsSubmitting] = useState(false);
24 |
25 | const handleSignIn = async () => {
26 | if (name && email && password) {
27 | setIsSubmitting(true);
28 | try {
29 | const response = await fetch('https://backendrn-production.up.railway.app/api/user/signin', {
30 | method: 'POST',
31 | headers: {
32 | 'Content-Type': 'application/json',
33 | },
34 | body: JSON.stringify({
35 | name,
36 | email,
37 | password,
38 | }),
39 | });
40 |
41 | const json = await response.json();
42 | if (json.success) {
43 | Alert.alert('Success', 'Sign-in Successful!');
44 | navigation.navigate('Card');
45 | } else {
46 | Alert.alert('Error', json.message || 'Sign-in Failed');
47 | }
48 | } catch (error) {
49 | Alert.alert('Error', 'An error occurred. Please try again.');
50 | console.error(error);
51 | } finally {
52 | setIsSubmitting(false);
53 | }
54 | } else {
55 | Alert.alert('Error', 'Please fill in all fields');
56 | }
57 | };
58 |
59 | return (
60 |
64 |
68 |
74 |
75 | Sign Up
76 |
83 |
91 |
98 |
103 | {isSubmitting ? (
104 |
105 | ) : (
106 | Sign In
107 | )}
108 |
109 |
110 |
111 |
112 | );
113 | }
114 |
115 | const styles = StyleSheet.create({
116 | container: {
117 | flex: 1,
118 | backgroundColor: '#f5f5f5',
119 | },
120 | scrollContainer: {
121 | flexGrow: 1,
122 | justifyContent: 'center',
123 | alignItems: 'center',
124 | paddingHorizontal: 20,
125 | },
126 | animation: {
127 | width: width * 0.8,
128 | height: width * 0.4,
129 | marginBottom: 30,
130 | },
131 | formContainer: {
132 | width: '100%',
133 | maxWidth: 400,
134 | backgroundColor: '#fff',
135 | borderRadius: 10,
136 | padding: 20,
137 | elevation: 5,
138 | shadowColor: '#000',
139 | shadowOpacity: 0.2,
140 | shadowOffset: { width: 0, height: 2 },
141 | shadowRadius: 10,
142 | marginBottom: 30,
143 | },
144 | title: {
145 | fontSize: 28,
146 | fontWeight: 'bold',
147 | textAlign: 'center',
148 | marginBottom: 20,
149 | color: '#333',
150 | },
151 | input: {
152 | height: 50,
153 | borderColor: '#ccc',
154 | borderWidth: 1,
155 | borderRadius: 10,
156 | marginBottom: 15,
157 | paddingHorizontal: 15,
158 | backgroundColor: '#fff',
159 | fontSize: 16,
160 | },
161 | button: {
162 | backgroundColor: '#007BFF',
163 | borderRadius: 10,
164 | paddingVertical: 15,
165 | alignItems: 'center',
166 | justifyContent: 'center',
167 | },
168 | buttonDisabled: {
169 | backgroundColor: '#a1a1a1',
170 | },
171 | buttonText: {
172 | color: '#fff',
173 | fontSize: 18,
174 | fontWeight: 'bold',
175 | },
176 | });
177 |
--------------------------------------------------------------------------------
/backend_rn/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@mongodb-js/saslprep@^1.1.5":
6 | version "1.1.8"
7 | resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz#d39744540be8800d17749990b0da95b4271840d1"
8 | integrity sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==
9 | dependencies:
10 | sparse-bitfield "^3.0.3"
11 |
12 | "@types/webidl-conversions@*":
13 | version "7.0.3"
14 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz#1306dbfa53768bcbcfc95a1c8cde367975581859"
15 | integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==
16 |
17 | "@types/whatwg-url@^11.0.2":
18 | version "11.0.5"
19 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-11.0.5.tgz#aaa2546e60f0c99209ca13360c32c78caf2c409f"
20 | integrity sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==
21 | dependencies:
22 | "@types/webidl-conversions" "*"
23 |
24 | accepts@~1.3.8:
25 | version "1.3.8"
26 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
27 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
28 | dependencies:
29 | mime-types "~2.1.34"
30 | negotiator "0.6.3"
31 |
32 | anymatch@~3.1.2:
33 | version "3.1.3"
34 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
35 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
36 | dependencies:
37 | normalize-path "^3.0.0"
38 | picomatch "^2.0.4"
39 |
40 | array-flatten@1.1.1:
41 | version "1.1.1"
42 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
43 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
44 |
45 | balanced-match@^1.0.0:
46 | version "1.0.2"
47 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
48 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
49 |
50 | bcryptjs@^2.4.3:
51 | version "2.4.3"
52 | resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
53 | integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==
54 |
55 | binary-extensions@^2.0.0:
56 | version "2.3.0"
57 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
58 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
59 |
60 | body-parser@1.20.2:
61 | version "1.20.2"
62 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
63 | integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
64 | dependencies:
65 | bytes "3.1.2"
66 | content-type "~1.0.5"
67 | debug "2.6.9"
68 | depd "2.0.0"
69 | destroy "1.2.0"
70 | http-errors "2.0.0"
71 | iconv-lite "0.4.24"
72 | on-finished "2.4.1"
73 | qs "6.11.0"
74 | raw-body "2.5.2"
75 | type-is "~1.6.18"
76 | unpipe "1.0.0"
77 |
78 | brace-expansion@^1.1.7:
79 | version "1.1.11"
80 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
81 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
82 | dependencies:
83 | balanced-match "^1.0.0"
84 | concat-map "0.0.1"
85 |
86 | braces@~3.0.2:
87 | version "3.0.3"
88 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
89 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
90 | dependencies:
91 | fill-range "^7.1.1"
92 |
93 | bson@^6.7.0:
94 | version "6.8.0"
95 | resolved "https://registry.yarnpkg.com/bson/-/bson-6.8.0.tgz#5063c41ba2437c2b8ff851b50d9e36cb7aaa7525"
96 | integrity sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==
97 |
98 | buffer-equal-constant-time@1.0.1:
99 | version "1.0.1"
100 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
101 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
102 |
103 | bytes@3.1.2:
104 | version "3.1.2"
105 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
106 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
107 |
108 | call-bind@^1.0.7:
109 | version "1.0.7"
110 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
111 | integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
112 | dependencies:
113 | es-define-property "^1.0.0"
114 | es-errors "^1.3.0"
115 | function-bind "^1.1.2"
116 | get-intrinsic "^1.2.4"
117 | set-function-length "^1.2.1"
118 |
119 | chokidar@^3.5.2:
120 | version "3.6.0"
121 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
122 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
123 | dependencies:
124 | anymatch "~3.1.2"
125 | braces "~3.0.2"
126 | glob-parent "~5.1.2"
127 | is-binary-path "~2.1.0"
128 | is-glob "~4.0.1"
129 | normalize-path "~3.0.0"
130 | readdirp "~3.6.0"
131 | optionalDependencies:
132 | fsevents "~2.3.2"
133 |
134 | concat-map@0.0.1:
135 | version "0.0.1"
136 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
137 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
138 |
139 | content-disposition@0.5.4:
140 | version "0.5.4"
141 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
142 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
143 | dependencies:
144 | safe-buffer "5.2.1"
145 |
146 | content-type@~1.0.4, content-type@~1.0.5:
147 | version "1.0.5"
148 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
149 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
150 |
151 | cookie-signature@1.0.6:
152 | version "1.0.6"
153 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
154 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
155 |
156 | cookie@0.6.0:
157 | version "0.6.0"
158 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
159 | integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
160 |
161 | cors@^2.8.5:
162 | version "2.8.5"
163 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
164 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
165 | dependencies:
166 | object-assign "^4"
167 | vary "^1"
168 |
169 | debug@2.6.9:
170 | version "2.6.9"
171 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
172 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
173 | dependencies:
174 | ms "2.0.0"
175 |
176 | debug@4.x, debug@^4:
177 | version "4.3.6"
178 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b"
179 | integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==
180 | dependencies:
181 | ms "2.1.2"
182 |
183 | define-data-property@^1.1.4:
184 | version "1.1.4"
185 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
186 | integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
187 | dependencies:
188 | es-define-property "^1.0.0"
189 | es-errors "^1.3.0"
190 | gopd "^1.0.1"
191 |
192 | depd@2.0.0:
193 | version "2.0.0"
194 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
195 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
196 |
197 | destroy@1.2.0:
198 | version "1.2.0"
199 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
200 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
201 |
202 | ecdsa-sig-formatter@1.0.11:
203 | version "1.0.11"
204 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
205 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
206 | dependencies:
207 | safe-buffer "^5.0.1"
208 |
209 | ee-first@1.1.1:
210 | version "1.1.1"
211 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
212 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
213 |
214 | encodeurl@~1.0.2:
215 | version "1.0.2"
216 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
217 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
218 |
219 | es-define-property@^1.0.0:
220 | version "1.0.0"
221 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
222 | integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
223 | dependencies:
224 | get-intrinsic "^1.2.4"
225 |
226 | es-errors@^1.3.0:
227 | version "1.3.0"
228 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
229 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
230 |
231 | escape-html@~1.0.3:
232 | version "1.0.3"
233 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
234 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
235 |
236 | etag@~1.8.1:
237 | version "1.8.1"
238 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
239 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
240 |
241 | express-validator@^7.2.0:
242 | version "7.2.0"
243 | resolved "https://registry.yarnpkg.com/express-validator/-/express-validator-7.2.0.tgz#f6077758732d52e2365bb983b1abaca51bbefba6"
244 | integrity sha512-I2ByKD8panjtr8Y05l21Wph9xk7kk64UMyvJCl/fFM/3CTJq8isXYPLeKW/aZBCdb/LYNv63PwhY8khw8VWocA==
245 | dependencies:
246 | lodash "^4.17.21"
247 | validator "~13.12.0"
248 |
249 | express@^4.19.2:
250 | version "4.19.2"
251 | resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
252 | integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
253 | dependencies:
254 | accepts "~1.3.8"
255 | array-flatten "1.1.1"
256 | body-parser "1.20.2"
257 | content-disposition "0.5.4"
258 | content-type "~1.0.4"
259 | cookie "0.6.0"
260 | cookie-signature "1.0.6"
261 | debug "2.6.9"
262 | depd "2.0.0"
263 | encodeurl "~1.0.2"
264 | escape-html "~1.0.3"
265 | etag "~1.8.1"
266 | finalhandler "1.2.0"
267 | fresh "0.5.2"
268 | http-errors "2.0.0"
269 | merge-descriptors "1.0.1"
270 | methods "~1.1.2"
271 | on-finished "2.4.1"
272 | parseurl "~1.3.3"
273 | path-to-regexp "0.1.7"
274 | proxy-addr "~2.0.7"
275 | qs "6.11.0"
276 | range-parser "~1.2.1"
277 | safe-buffer "5.2.1"
278 | send "0.18.0"
279 | serve-static "1.15.0"
280 | setprototypeof "1.2.0"
281 | statuses "2.0.1"
282 | type-is "~1.6.18"
283 | utils-merge "1.0.1"
284 | vary "~1.1.2"
285 |
286 | fill-range@^7.1.1:
287 | version "7.1.1"
288 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
289 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
290 | dependencies:
291 | to-regex-range "^5.0.1"
292 |
293 | finalhandler@1.2.0:
294 | version "1.2.0"
295 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
296 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
297 | dependencies:
298 | debug "2.6.9"
299 | encodeurl "~1.0.2"
300 | escape-html "~1.0.3"
301 | on-finished "2.4.1"
302 | parseurl "~1.3.3"
303 | statuses "2.0.1"
304 | unpipe "~1.0.0"
305 |
306 | forwarded@0.2.0:
307 | version "0.2.0"
308 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
309 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
310 |
311 | fresh@0.5.2:
312 | version "0.5.2"
313 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
314 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
315 |
316 | fsevents@~2.3.2:
317 | version "2.3.3"
318 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
319 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
320 |
321 | function-bind@^1.1.2:
322 | version "1.1.2"
323 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
324 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
325 |
326 | get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
327 | version "1.2.4"
328 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
329 | integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
330 | dependencies:
331 | es-errors "^1.3.0"
332 | function-bind "^1.1.2"
333 | has-proto "^1.0.1"
334 | has-symbols "^1.0.3"
335 | hasown "^2.0.0"
336 |
337 | glob-parent@~5.1.2:
338 | version "5.1.2"
339 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
340 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
341 | dependencies:
342 | is-glob "^4.0.1"
343 |
344 | gopd@^1.0.1:
345 | version "1.0.1"
346 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
347 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
348 | dependencies:
349 | get-intrinsic "^1.1.3"
350 |
351 | has-flag@^3.0.0:
352 | version "3.0.0"
353 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
354 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
355 |
356 | has-property-descriptors@^1.0.2:
357 | version "1.0.2"
358 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
359 | integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
360 | dependencies:
361 | es-define-property "^1.0.0"
362 |
363 | has-proto@^1.0.1:
364 | version "1.0.3"
365 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
366 | integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
367 |
368 | has-symbols@^1.0.3:
369 | version "1.0.3"
370 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
371 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
372 |
373 | hasown@^2.0.0:
374 | version "2.0.2"
375 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
376 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
377 | dependencies:
378 | function-bind "^1.1.2"
379 |
380 | http-errors@2.0.0:
381 | version "2.0.0"
382 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
383 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
384 | dependencies:
385 | depd "2.0.0"
386 | inherits "2.0.4"
387 | setprototypeof "1.2.0"
388 | statuses "2.0.1"
389 | toidentifier "1.0.1"
390 |
391 | iconv-lite@0.4.24:
392 | version "0.4.24"
393 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
394 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
395 | dependencies:
396 | safer-buffer ">= 2.1.2 < 3"
397 |
398 | ignore-by-default@^1.0.1:
399 | version "1.0.1"
400 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
401 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
402 |
403 | inherits@2.0.4:
404 | version "2.0.4"
405 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
406 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
407 |
408 | ipaddr.js@1.9.1:
409 | version "1.9.1"
410 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
411 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
412 |
413 | is-binary-path@~2.1.0:
414 | version "2.1.0"
415 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
416 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
417 | dependencies:
418 | binary-extensions "^2.0.0"
419 |
420 | is-extglob@^2.1.1:
421 | version "2.1.1"
422 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
423 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
424 |
425 | is-glob@^4.0.1, is-glob@~4.0.1:
426 | version "4.0.3"
427 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
428 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
429 | dependencies:
430 | is-extglob "^2.1.1"
431 |
432 | is-number@^7.0.0:
433 | version "7.0.0"
434 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
435 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
436 |
437 | jsonwebtoken@^9.0.2:
438 | version "9.0.2"
439 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
440 | integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
441 | dependencies:
442 | jws "^3.2.2"
443 | lodash.includes "^4.3.0"
444 | lodash.isboolean "^3.0.3"
445 | lodash.isinteger "^4.0.4"
446 | lodash.isnumber "^3.0.3"
447 | lodash.isplainobject "^4.0.6"
448 | lodash.isstring "^4.0.1"
449 | lodash.once "^4.0.0"
450 | ms "^2.1.1"
451 | semver "^7.5.4"
452 |
453 | jwa@^1.4.1:
454 | version "1.4.1"
455 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
456 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
457 | dependencies:
458 | buffer-equal-constant-time "1.0.1"
459 | ecdsa-sig-formatter "1.0.11"
460 | safe-buffer "^5.0.1"
461 |
462 | jws@^3.2.2:
463 | version "3.2.2"
464 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
465 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
466 | dependencies:
467 | jwa "^1.4.1"
468 | safe-buffer "^5.0.1"
469 |
470 | kareem@2.6.3:
471 | version "2.6.3"
472 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.6.3.tgz#23168ec8ffb6c1abfd31b7169a6fb1dd285992ac"
473 | integrity sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==
474 |
475 | lodash.includes@^4.3.0:
476 | version "4.3.0"
477 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
478 | integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
479 |
480 | lodash.isboolean@^3.0.3:
481 | version "3.0.3"
482 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
483 | integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
484 |
485 | lodash.isinteger@^4.0.4:
486 | version "4.0.4"
487 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
488 | integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
489 |
490 | lodash.isnumber@^3.0.3:
491 | version "3.0.3"
492 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
493 | integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
494 |
495 | lodash.isplainobject@^4.0.6:
496 | version "4.0.6"
497 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
498 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
499 |
500 | lodash.isstring@^4.0.1:
501 | version "4.0.1"
502 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
503 | integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
504 |
505 | lodash.once@^4.0.0:
506 | version "4.1.1"
507 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
508 | integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
509 |
510 | lodash@^4.17.21:
511 | version "4.17.21"
512 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
513 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
514 |
515 | media-typer@0.3.0:
516 | version "0.3.0"
517 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
518 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
519 |
520 | memory-pager@^1.0.2:
521 | version "1.5.0"
522 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
523 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
524 |
525 | merge-descriptors@1.0.1:
526 | version "1.0.1"
527 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
528 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
529 |
530 | methods@~1.1.2:
531 | version "1.1.2"
532 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
533 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
534 |
535 | mime-db@1.52.0:
536 | version "1.52.0"
537 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
538 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
539 |
540 | mime-types@~2.1.24, mime-types@~2.1.34:
541 | version "2.1.35"
542 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
543 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
544 | dependencies:
545 | mime-db "1.52.0"
546 |
547 | mime@1.6.0:
548 | version "1.6.0"
549 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
550 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
551 |
552 | minimatch@^3.1.2:
553 | version "3.1.2"
554 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
555 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
556 | dependencies:
557 | brace-expansion "^1.1.7"
558 |
559 | mongodb-connection-string-url@^3.0.0:
560 | version "3.0.1"
561 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz#c13e6ac284ae401752ebafdb8cd7f16c6723b141"
562 | integrity sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==
563 | dependencies:
564 | "@types/whatwg-url" "^11.0.2"
565 | whatwg-url "^13.0.0"
566 |
567 | mongodb@6.7.0:
568 | version "6.7.0"
569 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-6.7.0.tgz#f86e51e6530e6a2ca4a99d7cfdf6f409223ac199"
570 | integrity sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==
571 | dependencies:
572 | "@mongodb-js/saslprep" "^1.1.5"
573 | bson "^6.7.0"
574 | mongodb-connection-string-url "^3.0.0"
575 |
576 | mongoose@^8.5.3:
577 | version "8.5.3"
578 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-8.5.3.tgz#4ab3a62173dc72a9263608a02947e19bf95604af"
579 | integrity sha512-OubSDbsAclDFGHjV82MsKyIGQWFc42Ot1l+0dhRS6U9xODM7rm/ES/WpOQd8Ds9j0Mx8QzxZtrSCnBh6o9wUqw==
580 | dependencies:
581 | bson "^6.7.0"
582 | kareem "2.6.3"
583 | mongodb "6.7.0"
584 | mpath "0.9.0"
585 | mquery "5.0.0"
586 | ms "2.1.3"
587 | sift "17.1.3"
588 |
589 | mpath@0.9.0:
590 | version "0.9.0"
591 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904"
592 | integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==
593 |
594 | mquery@5.0.0:
595 | version "5.0.0"
596 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-5.0.0.tgz#a95be5dfc610b23862df34a47d3e5d60e110695d"
597 | integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==
598 | dependencies:
599 | debug "4.x"
600 |
601 | ms@2.0.0:
602 | version "2.0.0"
603 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
604 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
605 |
606 | ms@2.1.2:
607 | version "2.1.2"
608 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
609 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
610 |
611 | ms@2.1.3, ms@^2.1.1:
612 | version "2.1.3"
613 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
614 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
615 |
616 | negotiator@0.6.3:
617 | version "0.6.3"
618 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
619 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
620 |
621 | nodemailer@^6.9.14:
622 | version "6.9.14"
623 | resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.14.tgz#845fda981f9fd5ac264f4446af908a7c78027f75"
624 | integrity sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==
625 |
626 | nodemon@^3.1.4:
627 | version "3.1.4"
628 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4"
629 | integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==
630 | dependencies:
631 | chokidar "^3.5.2"
632 | debug "^4"
633 | ignore-by-default "^1.0.1"
634 | minimatch "^3.1.2"
635 | pstree.remy "^1.1.8"
636 | semver "^7.5.3"
637 | simple-update-notifier "^2.0.0"
638 | supports-color "^5.5.0"
639 | touch "^3.1.0"
640 | undefsafe "^2.0.5"
641 |
642 | normalize-path@^3.0.0, normalize-path@~3.0.0:
643 | version "3.0.0"
644 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
645 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
646 |
647 | object-assign@^4:
648 | version "4.1.1"
649 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
650 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
651 |
652 | object-inspect@^1.13.1:
653 | version "1.13.2"
654 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
655 | integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
656 |
657 | on-finished@2.4.1:
658 | version "2.4.1"
659 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
660 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
661 | dependencies:
662 | ee-first "1.1.1"
663 |
664 | parseurl@~1.3.3:
665 | version "1.3.3"
666 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
667 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
668 |
669 | path-to-regexp@0.1.7:
670 | version "0.1.7"
671 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
672 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
673 |
674 | picomatch@^2.0.4, picomatch@^2.2.1:
675 | version "2.3.1"
676 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
677 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
678 |
679 | proxy-addr@~2.0.7:
680 | version "2.0.7"
681 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
682 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
683 | dependencies:
684 | forwarded "0.2.0"
685 | ipaddr.js "1.9.1"
686 |
687 | pstree.remy@^1.1.8:
688 | version "1.1.8"
689 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
690 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
691 |
692 | punycode@^2.3.0:
693 | version "2.3.1"
694 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
695 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
696 |
697 | qs@6.11.0:
698 | version "6.11.0"
699 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
700 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
701 | dependencies:
702 | side-channel "^1.0.4"
703 |
704 | range-parser@~1.2.1:
705 | version "1.2.1"
706 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
707 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
708 |
709 | raw-body@2.5.2:
710 | version "2.5.2"
711 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
712 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
713 | dependencies:
714 | bytes "3.1.2"
715 | http-errors "2.0.0"
716 | iconv-lite "0.4.24"
717 | unpipe "1.0.0"
718 |
719 | readdirp@~3.6.0:
720 | version "3.6.0"
721 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
722 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
723 | dependencies:
724 | picomatch "^2.2.1"
725 |
726 | safe-buffer@5.2.1, safe-buffer@^5.0.1:
727 | version "5.2.1"
728 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
729 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
730 |
731 | "safer-buffer@>= 2.1.2 < 3":
732 | version "2.1.2"
733 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
734 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
735 |
736 | semver@^7.5.3, semver@^7.5.4:
737 | version "7.6.3"
738 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
739 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
740 |
741 | send@0.18.0:
742 | version "0.18.0"
743 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
744 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
745 | dependencies:
746 | debug "2.6.9"
747 | depd "2.0.0"
748 | destroy "1.2.0"
749 | encodeurl "~1.0.2"
750 | escape-html "~1.0.3"
751 | etag "~1.8.1"
752 | fresh "0.5.2"
753 | http-errors "2.0.0"
754 | mime "1.6.0"
755 | ms "2.1.3"
756 | on-finished "2.4.1"
757 | range-parser "~1.2.1"
758 | statuses "2.0.1"
759 |
760 | serve-static@1.15.0:
761 | version "1.15.0"
762 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
763 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
764 | dependencies:
765 | encodeurl "~1.0.2"
766 | escape-html "~1.0.3"
767 | parseurl "~1.3.3"
768 | send "0.18.0"
769 |
770 | set-function-length@^1.2.1:
771 | version "1.2.2"
772 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
773 | integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
774 | dependencies:
775 | define-data-property "^1.1.4"
776 | es-errors "^1.3.0"
777 | function-bind "^1.1.2"
778 | get-intrinsic "^1.2.4"
779 | gopd "^1.0.1"
780 | has-property-descriptors "^1.0.2"
781 |
782 | setprototypeof@1.2.0:
783 | version "1.2.0"
784 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
785 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
786 |
787 | side-channel@^1.0.4:
788 | version "1.0.6"
789 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
790 | integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
791 | dependencies:
792 | call-bind "^1.0.7"
793 | es-errors "^1.3.0"
794 | get-intrinsic "^1.2.4"
795 | object-inspect "^1.13.1"
796 |
797 | sift@17.1.3:
798 | version "17.1.3"
799 | resolved "https://registry.yarnpkg.com/sift/-/sift-17.1.3.tgz#9d2000d4d41586880b0079b5183d839c7a142bf7"
800 | integrity sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==
801 |
802 | simple-update-notifier@^2.0.0:
803 | version "2.0.0"
804 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
805 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
806 | dependencies:
807 | semver "^7.5.3"
808 |
809 | sparse-bitfield@^3.0.3:
810 | version "3.0.3"
811 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
812 | integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
813 | dependencies:
814 | memory-pager "^1.0.2"
815 |
816 | statuses@2.0.1:
817 | version "2.0.1"
818 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
819 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
820 |
821 | supports-color@^5.5.0:
822 | version "5.5.0"
823 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
824 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
825 | dependencies:
826 | has-flag "^3.0.0"
827 |
828 | to-regex-range@^5.0.1:
829 | version "5.0.1"
830 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
831 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
832 | dependencies:
833 | is-number "^7.0.0"
834 |
835 | toidentifier@1.0.1:
836 | version "1.0.1"
837 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
838 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
839 |
840 | touch@^3.1.0:
841 | version "3.1.1"
842 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694"
843 | integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==
844 |
845 | tr46@^4.1.1:
846 | version "4.1.1"
847 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469"
848 | integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==
849 | dependencies:
850 | punycode "^2.3.0"
851 |
852 | type-is@~1.6.18:
853 | version "1.6.18"
854 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
855 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
856 | dependencies:
857 | media-typer "0.3.0"
858 | mime-types "~2.1.24"
859 |
860 | undefsafe@^2.0.5:
861 | version "2.0.5"
862 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
863 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
864 |
865 | unpipe@1.0.0, unpipe@~1.0.0:
866 | version "1.0.0"
867 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
868 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
869 |
870 | utils-merge@1.0.1:
871 | version "1.0.1"
872 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
873 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
874 |
875 | validator@~13.12.0:
876 | version "13.12.0"
877 | resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f"
878 | integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==
879 |
880 | vary@^1, vary@~1.1.2:
881 | version "1.1.2"
882 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
883 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
884 |
885 | webidl-conversions@^7.0.0:
886 | version "7.0.0"
887 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
888 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
889 |
890 | whatwg-url@^13.0.0:
891 | version "13.0.0"
892 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-13.0.0.tgz#b7b536aca48306394a34e44bda8e99f332410f8f"
893 | integrity sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==
894 | dependencies:
895 | tr46 "^4.1.1"
896 | webidl-conversions "^7.0.0"
897 |
--------------------------------------------------------------------------------