From 2c295ad7311085810d9abf3c9186df6b554e33ba Mon Sep 17 00:00:00 2001
From: shwetharbaliga
Date: Fri, 31 Oct 2025 23:49:20 +0530
Subject: [PATCH 1/5] add: mvp frontend mini project - css 2d cloud animation
---
.../Frontend/MiniProjects/CSSCLOUDS/README.md | 52 +++++
.../MiniProjects/CSSCLOUDS/src/index.html | 20 ++
.../MiniProjects/CSSCLOUDS/src/style.css | 220 ++++++++++++++++++
3 files changed, 292 insertions(+)
create mode 100644 Domains/Frontend/MiniProjects/CSSCLOUDS/README.md
create mode 100644 Domains/Frontend/MiniProjects/CSSCLOUDS/src/index.html
create mode 100644 Domains/Frontend/MiniProjects/CSSCLOUDS/src/style.css
diff --git a/Domains/Frontend/MiniProjects/CSSCLOUDS/README.md b/Domains/Frontend/MiniProjects/CSSCLOUDS/README.md
new file mode 100644
index 00000000..63ff6343
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/CSSCLOUDS/README.md
@@ -0,0 +1,52 @@
+# โ๏ธ CSS 2D Cloud Animation โ Frontend Mini Project ๐ค๏ธ
+
+A soothing **pure CSS animation project** that brings a peaceful sky to life with drifting 2D clouds.
+Designed to showcase how simple shapes, gradients, and keyframes can create a realistic animation effect โ all without JavaScript!
+
+---
+
+## โจ Features (MVP)
+- ๐ Gradient sky background with depth
+- โ๏ธ Smoothly floating layered clouds using CSS keyframes
+- ๐จ Responsive layout (works on all screen sizes)
+- ๐ป Lightweight and pure HTML + CSS project
+- ๐งฉ Perfect for creative front-end contributions
+
+---
+
+## ๐ง Tech Stack
+**Frontend:** HTML, CSS
+**Animation:** CSS `@keyframes`, `transform`, `animation-duration`
+
+---
+
+## โ๏ธ Getting Started
+
+### 1๏ธโฃ Clone the Repository
+```bash
+
+git clone https://github.com/shwetharbaliga/CSS-CLOUD-ANIMATION.git
+cd CSS-CLOUD-ANIMATION
+```
+
+### 2๏ธโฃ Run the Project
+
+Just open index.html in your browser โ no setup needed!
+Sit back and watch your clouds drift peacefully across the sky โ๏ธโจ
+
+## ๐ Project Structure
+```
+CSS-CLOUD-ANIMATION/
+โ
+โโโ index.html
+โโโ style.css
+โโโ README.md
+```
+
+๐งก Credits
+
+Built by Shweta Ravindra Baliga
+
+๐ฉโ๐ป Contributor
+
+Contributor: shwetharbaliga
diff --git a/Domains/Frontend/MiniProjects/CSSCLOUDS/src/index.html b/Domains/Frontend/MiniProjects/CSSCLOUDS/src/index.html
new file mode 100644
index 00000000..e6a3e5f7
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/CSSCLOUDS/src/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+ CSS 2D Cloud Animation
+
+
+
+
+
+
diff --git a/Domains/Frontend/MiniProjects/CSSCLOUDS/src/style.css b/Domains/Frontend/MiniProjects/CSSCLOUDS/src/style.css
new file mode 100644
index 00000000..f607d42f
--- /dev/null
+++ b/Domains/Frontend/MiniProjects/CSSCLOUDS/src/style.css
@@ -0,0 +1,220 @@
+body {
+ margin: 0;
+ padding: 0;
+ background-color:#A8F1FF;
+}
+.cloud{
+ transform: translateX(-250px);
+ top:60px;
+ width:140px;
+ height:40px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud::before{
+ content:'';
+ position:absolute;
+ width:40px;
+ height:35px;
+ background:#fff;
+ border-radius:50%;
+ top:-16px;
+ left:15px;
+}
+.cloud::after{
+ content:'';
+ position:absolute;
+ width:80px;
+ height:80px;
+ background:#fff;
+ border-radius:50%;
+ top:-40px;
+ right:15px;
+}
+.cloud-one{
+ transform: translateX(-250px);
+ top:120px;
+ width:140px;
+ height:40px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-one::before{
+ content:'';
+ position:absolute;
+ width:40px;
+ height:35px;
+ background:#fff;
+ border-radius:50%;
+ top:-16px;
+ left:15px;
+}
+.cloud-one::after{
+ content:'';
+ position:absolute;
+ width:80px;
+ height:80px;
+ background:#fff;
+ border-radius:50%;
+ top:-40px;
+ right:15px;
+}
+.cloud-two{
+ transform: translateX(-250px);
+ top:20px;
+ width:140px;
+ height:40px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-two::before{
+ content:'';
+ position:absolute;
+ width:40px;
+ height:35px;
+ background:#fff;
+ border-radius:50%;
+ top:-16px;
+ left:15px;
+}
+.cloud-two::after{
+ content:'';
+ position:absolute;
+ width:80px;
+ height:80px;
+ background:#fff;
+ border-radius:50%;
+ top:-40px;
+ right:15px;
+}
+.cloud-lg{
+ transform: translateX(-250px);
+ top:10px;
+ width:170px;
+ height:50px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-lg::before{
+ content:'';
+ position:absolute;
+ width:60px;
+ height:55px;
+ background:#fff;
+ border-radius:50%;
+ top:-35px;
+ left:15px;
+}
+.cloud-lg::after{
+ content:'';
+ position:absolute;
+ width:110px;
+ height:110px;
+ background:#fff;
+ border-radius:50%;
+ top:-60px;
+ right:15px;
+}
+.cloud-sm{
+ transform: translateX(-250px);
+ top:60px;
+ width:80px;
+ height:20px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-sm::before{
+ content:'';
+ position:absolute;
+ width:20px;
+ height:20px;
+ background:#fff;
+ border-radius:50%;
+ top:-13px;
+ left:10px;
+}
+.cloud-sm::after{
+ content:'';
+ position:absolute;
+ width:50px;
+ height:45px;
+ background:#fff;
+ border-radius:50%;
+ top:-27px;
+ right:5px;
+}
+.cloud-sm1{
+ transform: translateX(-250px);
+ top:-120px;
+ width:80px;
+ height:20px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-sm1::before{
+ content:'';
+ position:absolute;
+ width:20px;
+ height:20px;
+ background:#fff;
+ border-radius:50%;
+ top:-13px;
+ left:10px;
+}
+.cloud-sm1::after{
+ content:'';
+ position:absolute;
+ width:50px;
+ height:45px;
+ background:#fff;
+ border-radius:50%;
+ top:-27px;
+ right:5px;
+}
+.cloud-sm2{
+ transform: translateX(-250px);
+ top:30px;
+ width:80px;
+ height:20px;
+ background:#fff;
+ border-radius:50px;
+ position:relative;
+}
+.cloud-sm2::before{
+ content:'';
+ position:absolute;
+ width:20px;
+ height:20px;
+ background:#fff;
+ border-radius:50%;
+ top:-13px;
+ left:10px;
+}
+.cloud-sm2::after{
+ content:'';
+ position:absolute;
+ width:50px;
+ height:45px;
+ background:#fff;
+ border-radius:50%;
+ top:-27px;
+ right:5px;
+}
+@keyframes float {
+ 0% { transform: translateX(-250px); }
+ 90% { transform: translateX(100vw); }
+ 100% { transform: translateX(100vw); }
+}
+.cloud { animation: float 60s linear infinite; animation-delay: 0s; }
+.cloud-one { animation: float 60s linear infinite; animation-delay: 10s; }
+.cloud-two { animation: float 60s linear infinite; animation-delay: 20s; }
+.cloud-lg { animation: float 70s linear infinite; animation-delay: 30s; }
+.cloud-sm { animation: float 50s linear infinite; animation-delay: 5s; }
+.cloud-sm1 { animation: float 55s linear infinite; animation-delay: 45s; }
+.cloud-sm2 { animation: float 65s linear infinite; animation-delay: 25s; }
From 9aa6543640d3b2fa1ab5d341521096ee91def21a Mon Sep 17 00:00:00 2001
From: shwetharbaliga
Date: Fri, 31 Oct 2025 23:58:23 +0530
Subject: [PATCH 2/5] add: mvp full stack project - DARE
---
.../MiniProjects/DARE/Backend/.gitignore | 5 +
.../DARE/Backend/package-lock.json | 1932 +++++++++++++++++
.../MiniProjects/DARE/Backend/package.json | 27 +
.../MiniProjects/DARE/Backend/server.js | 1036 +++++++++
.../MiniProjects/DARE/Frontend/.eslintrc.cjs | 21 +
.../MiniProjects/DARE/Frontend/.gitignore | 24 +
.../DARE/Frontend/UserContext.jsx | 16 +
.../MiniProjects/DARE/Frontend/index.html | 13 +
.../DARE/Frontend/package-lock.json | 0
.../MiniProjects/DARE/Frontend/package.json | 38 +
.../DARE/Frontend/postcss.config.js | 6 +
.../DARE/Frontend/public/vite.svg | 1 +
.../DARE/Frontend/src/AdminAid.jsx | 264 +++
.../DARE/Frontend/src/AdminDisaster.jsx | 288 +++
.../DARE/Frontend/src/AdminEmergency.jsx | 908 ++++++++
.../DARE/Frontend/src/AdminFooter.jsx | 64 +
.../DARE/Frontend/src/AdminFunds.jsx | 251 +++
.../DARE/Frontend/src/AdminLogin.jsx | 114 +
.../DARE/Frontend/src/AdminNavbar.jsx | 162 ++
.../DARE/Frontend/src/AdminRescue.jsx | 245 +++
.../DARE/Frontend/src/AdminShelter.jsx | 259 +++
.../DARE/Frontend/src/AdminVolunteer.jsx | 7 +
.../DARE/Frontend/src/Adminhome.jsx | 234 ++
.../DARE/Frontend/src/Adminsafety.jsx | 202 ++
.../MiniProjects/DARE/Frontend/src/App.css | 9 +
.../MiniProjects/DARE/Frontend/src/App.jsx | 55 +
.../DARE/Frontend/src/DefaultHome.jsx | 417 ++++
.../DARE/Frontend/src/DefaultNavbar.jsx | 491 +++++
.../DARE/Frontend/src/DisasterTrack.jsx | 383 ++++
.../DARE/Frontend/src/Donateform.jsx | 7 +
.../MiniProjects/DARE/Frontend/src/Footer.jsx | 143 ++
.../DARE/Frontend/src/Funds&AidSupplies.jsx | 107 +
.../MiniProjects/DARE/Frontend/src/Home.jsx | 241 ++
.../DARE/Frontend/src/LoginForm.jsx | 273 +++
.../MiniProjects/DARE/Frontend/src/Navbar.jsx | 319 +++
.../DARE/Frontend/src/SafetyInstructions.jsx | 609 ++++++
.../Frontend/src/Shelters&RescueTeams.jsx | 122 ++
.../DARE/Frontend/src/SignupForm.jsx | 253 +++
.../Frontend/src/VolunteerRegistration.jsx | 41 +
.../MiniProjects/DARE/Frontend/src/index.css | 30 +
.../MiniProjects/DARE/Frontend/src/main.jsx | 10 +
.../DARE/Frontend/tailwind.config.js | 51 +
.../MiniProjects/DARE/Frontend/vite.config.js | 8 +
43 files changed, 9686 insertions(+)
create mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
create mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
create mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/package.json
create mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/server.js
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/index.html
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/package.json
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore b/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
new file mode 100644
index 00000000..797ca4d1
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
@@ -0,0 +1,5 @@
+
+.env*
+.flaskenv*
+!.env.project
+!.env.vault
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json b/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
new file mode 100644
index 00000000..7dd16f5b
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
@@ -0,0 +1,1932 @@
+{
+ "name": "backend",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "backend",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "bcrypt": "^5.1.1",
+ "body-parser": "^1.20.2",
+ "cookie-parser": "^1.4.6",
+ "cors": "^2.8.5",
+ "dotenv": "^16.4.5",
+ "env": "^0.0.2",
+ "express": "^4.18.3",
+ "express-session": "^1.18.0",
+ "jsonwebtoken": "^9.0.2",
+ "mysql": "^2.18.1",
+ "mysql2": "^3.9.2",
+ "nodemon": "^3.1.0"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/agent-base/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agent-base/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/aproba": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/bcrypt": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
+ "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@mapbox/node-pre-gyp": "^1.0.11",
+ "node-addon-api": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/bignumber.js": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+ "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.11.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-parser": {
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
+ "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/cookie-parser/node_modules/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+ },
+ "node_modules/denque": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
+ "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dotenv": {
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
+ }
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/env": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/env/-/env-0.0.2.tgz",
+ "integrity": "sha512-yP8LfjO4ughSHD/3HgLPinWzexmaOGvRfs2TFx0SZhOm7j1xPi9evjuGcLiNVHIGLmcsgMak4eDbBzlYqGIVxw==",
+ "engines": {
+ "node": ">= 0.5.9"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "4.18.3",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz",
+ "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.2",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.5.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.2.0",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.11.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/express-session": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.0.tgz",
+ "integrity": "sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==",
+ "dependencies": {
+ "cookie": "0.6.0",
+ "cookie-signature": "1.0.7",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.1",
+ "uid-safe": "~2.1.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express-session/node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express-session/node_modules/cookie-signature": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
+ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dependencies": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
+ "node_modules/long": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ },
+ "node_modules/lru-cache": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
+ "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
+ "engines": {
+ "node": ">=16.14"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
+ },
+ "node_modules/methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
+ "node_modules/mysql": {
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
+ "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
+ "dependencies": {
+ "bignumber.js": "9.0.0",
+ "readable-stream": "2.3.7",
+ "safe-buffer": "5.1.2",
+ "sqlstring": "2.3.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mysql/node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/mysql/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/mysql/node_modules/sqlstring": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
+ "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mysql/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/mysql2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.2.tgz",
+ "integrity": "sha512-3Cwg/UuRkAv/wm6RhtPE5L7JlPB877vwSF6gfLAS68H+zhH+u5oa3AieqEd0D0/kC3W7qIhYbH419f7O9i/5nw==",
+ "dependencies": {
+ "denque": "^2.1.0",
+ "generate-function": "^2.3.1",
+ "iconv-lite": "^0.6.3",
+ "long": "^5.2.1",
+ "lru-cache": "^8.0.0",
+ "named-placeholders": "^1.1.3",
+ "seq-queue": "^0.0.5",
+ "sqlstring": "^2.3.2"
+ },
+ "engines": {
+ "node": ">= 8.0"
+ }
+ },
+ "node_modules/mysql2/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/named-placeholders": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
+ "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
+ "dependencies": {
+ "lru-cache": "^7.14.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/named-placeholders/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
+ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
+ "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nodemon/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
+ },
+ "node_modules/qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node_modules/seq-queue": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
+ },
+ "node_modules/serve-static": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+ "dependencies": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.18.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sqlstring": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
+ "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
+ "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/touch": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
+ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+ "dependencies": {
+ "nopt": "~1.0.10"
+ },
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
+ }
+ },
+ "node_modules/touch/node_modules/nopt": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
+ "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "dependencies": {
+ "random-bytes": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/package.json b/Domains/FullStack/MiniProjects/DARE/Backend/package.json
new file mode 100644
index 00000000..9e3b9a80
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Backend/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "backend",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "start": "nodemon server.js"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "bcrypt": "^5.1.1",
+ "body-parser": "^1.20.2",
+ "cookie-parser": "^1.4.6",
+ "cors": "^2.8.5",
+ "dotenv": "^16.4.5",
+ "env": "^0.0.2",
+ "express": "^4.18.3",
+ "express-session": "^1.18.0",
+ "jsonwebtoken": "^9.0.2",
+ "mysql": "^2.18.1",
+ "mysql2": "^3.9.2",
+ "nodemon": "^3.1.0"
+ }
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/server.js b/Domains/FullStack/MiniProjects/DARE/Backend/server.js
new file mode 100644
index 00000000..cc66ef2a
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Backend/server.js
@@ -0,0 +1,1036 @@
+const express = require("express");
+const mysql = require("mysql2/promise");
+const cors = require("cors");
+const bcrypt = require("bcrypt");
+const jwt = require("jsonwebtoken");
+require("dotenv").config();
+
+const app = express();
+
+app.use(
+ cors({
+ origin: "http://localhost:5173", // Adjust this to match your frontend's URL
+ credentials: true,
+ methods: ["GET", "POST", "DELETE", "PUT"],
+ })
+);
+app.use(express.json());
+
+let connection;
+// Database connection setup
+async function connectToDatabase() {
+ try {
+ connection = await mysql.createConnection({
+ host: process.env.DB_HOST,
+ user: process.env.DB_USER,
+ password: process.env.DB_PASSWORD,
+ database: process.env.DB_NAME,
+ });
+ console.log("Database connected successfully");
+ } catch (error) {
+ console.error("Error connecting to database:", error);
+ process.exit(1);
+ }
+}
+app.get("/api/login", async (req, res) => {
+ try {
+ const [rows] = await connection.execute("SELECT name FROM login");
+ res.json(rows);
+ } catch (error) {
+ console.error("Error fetching ", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.get("/api/admindisaster", async (req, res) => {
+ try {
+ const [rows] = await connection.execute(
+ "SELECT d_id, type, date, severity, shel_id2, re_id, location FROM disaster_track"
+ );
+ res.json(rows);
+ } catch (error) {
+ console.error("Error fetching disaster track data:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.delete("/api/admindisaster/:d_id", async (req, res) => {
+ try {
+ const d_id = req.params.d_id;
+ const [rows] = await connection.execute(
+ "DELETE FROM disaster_track WHERE d_id = ?",
+ [d_id]
+ );
+ res.json(rows);
+ } catch (error) {
+ console.error("Error deleting disaster track data:", error);
+ // Log the error stack trace for more details
+ console.error(error.stack);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+async function updateDisasterItemInDatabase(id, updatedItem) {
+ try {
+ // Assuming you have a connection object `connection`
+ await connection.query(
+ "UPDATE disaster_track SET type = ?, date = ?, severity = ?, shel_id2 = ?, re_id = ?, location = ? WHERE d_id = ?",
+ [
+ updatedItem.type,
+ updatedItem.date,
+ updatedItem.severity,
+ updatedItem.shel_id2,
+ updatedItem.re_id,
+ updatedItem.location,
+ id,
+ ]
+ );
+ return { success: true };
+ } catch (error) {
+ console.error("Database update error:", error);
+ return { success: false };
+ }
+}
+
+app.put("/api/admindisaster/:id", async (req, res) => {
+ const { id } = req.params; // Extract the ID from the URL parameters
+ const updatedItem = req.body; // Extract the updated item data from the request body
+
+ try {
+ const result = await updateDisasterItemInDatabase(id, updatedItem);
+ if (result.success) {
+ res.status(200).json({ message: "Item updated successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to update item" });
+ }
+ } catch (error) {
+ console.error("Error updating item:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.post("/api/admindisaster", async (req, res) => {
+ // Basic input validation
+ if (
+ !req.body.d_id ||
+ !req.body.type ||
+ !req.body.date ||
+ !req.body.shel_id2 || // Adjusted field name
+ !req.body.re_id || // Adjusted field name
+ !req.body.location
+ ) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newItem = {
+ d_id: req.body.d_id,
+ type: req.body.type,
+ date: req.body.date,
+ severity: req.body.severity, // Set to null if missing
+ shel_id2: req.body.shel_id2, // Adjusted field name
+ re_id: req.body.re_id, // Adjusted field name
+ location: req.body.location,
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO disaster_track (d_id, type, date, severity, Shel_ID2, Re_ID, location) VALUES (?,?,?,?,?,?,?)",
+ [
+ newItem.d_id,
+ newItem.type,
+ newItem.date,
+ newItem.severity,
+ newItem.shel_id2, // Adjusted field name
+ newItem.re_id, // Adjusted field name
+ newItem.location,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.status(201).json({ message: "Item added successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to add item" });
+ }
+ } catch (error) {
+ console.error("Error adding item:", error);
+ // Enhanced error handling
+ if (error.code === "ER_DUP_ENTRY") {
+ return res.status(409).json({ message: "Item already exists" });
+ } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
+ return res.status(500).json({ message: "Database access denied" });
+ } else {
+ return res.status(500).json({ message: "Internal Server Error" });
+ }
+ }
+});
+
+app.get("/api/safety_instructions", async (req, res) => {
+ try {
+ const [rows] = await connection.execute(
+ "SELECT did, safety_instructions FROM safety_instructions"
+ );
+ res.json(rows);
+ } catch (error) {
+ console.error("Error fetching safety instructions:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.delete("/api/safety_instructions/:did", async (req, res) => {
+ try {
+ const did = req.params.did;
+ const [rows] = await connection.execute(
+ "DELETE FROM safety_instructions WHERE did = ?",
+ [did]
+ );
+ res.json(rows);
+ } catch (error) {
+ console.error("Error deleting safety instruction:", error);
+ console.error(error.stack); // Log the error stack trace for more details
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+async function updateSafetyInstructionInDatabase(id, updatedInstruction) {
+ try {
+ // Assuming you have a connection object `connection`
+ await connection.query(
+ "UPDATE safety_instructions SET safety_instructions = ? WHERE did = ?",
+ [updatedInstruction, id]
+ );
+ return { success: true };
+ } catch (error) {
+ console.error("Database update error:", error);
+ return { success: false };
+ }
+}
+
+app.put("/api/safety_instructions/:id", async (req, res) => {
+ const { id } = req.params; // Extract the ID from the URL parameters
+ const updatedInstruction = req.body; // Extract the updated instruction from the request body
+
+ try {
+ const result = await updateSafetyInstructionInDatabase(
+ id,
+ updatedInstruction
+ );
+ if (result.success) {
+ res.status(200).json({ message: "Instruction updated successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to update instruction" });
+ }
+ } catch (error) {
+ console.error("Error updating instruction:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.post("/api/emergency_help_request_victim_records", async (req, res) => {
+ // Basic input validation
+ if (
+ // !req.body.E_ID ||
+ !req.body.Name ||
+ !req.body.Contact ||
+ !req.body.disaster_type ||
+ !req.body.current_location ||
+ req.body.isCurrentVictim === undefined
+ ) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newRecord = {
+ E_ID: req.body.E_ID || null,
+ Name: req.body.Name,
+ Contact: req.body.Contact,
+ disaster_type: req.body.disaster_type,
+ current_location: req.body.current_location,
+ isCurrentVictim: req.body.isCurrentVictim === "1" ? true : false, // Parse as boolean
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO emergency_help_request_victim_records (E_ID,Name, Contact, disaster_type, current_location, isCurrentVictim) VALUES (?,?, ?, ?, ?, ?)",
+ [
+ newRecord.E_ID,
+ newRecord.Name,
+ newRecord.Contact,
+ newRecord.disaster_type,
+ newRecord.current_location,
+ newRecord.isCurrentVictim,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.status(201).json({
+ message: "Emergency help request victim record added successfully",
+ });
+ } else {
+ res.status(500).json({
+ message: "Failed to add emergency help request victim record",
+ });
+ }
+ } catch (error) {
+ console.error("Error adding emergency help request victim record:", error);
+ // Enhanced error handling
+ if (error.code === "ER_DUP_ENTRY") {
+ return res.status(409).json({
+ message: "Emergency help request victim record already exists",
+ });
+ } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
+ return res.status(500).json({ message: "Database access denied" });
+ } else {
+ return res.status(500).json({ message: "Internal Server Error" });
+ }
+ }
+});
+// app.post("/api/emergency_help_request_victim_records", async (req, res) => {
+// // Basic input validation
+// if (
+// !req.body.Name ||
+// !req.body.Contact ||
+// !req.body.disaster_type ||
+// !req.body.current_location ||
+// req.body.isCurrentVictim === undefined
+// ) {
+// return res.status(400).json({ message: "Missing required fields" });
+// }
+
+// const newRecord = {
+// Name: req.body.Name,
+// Contact: req.body.Contact,
+// disaster_type: req.body.disaster_type,
+// current_location: req.body.current_location,
+// isCurrentVictim: req.body.isCurrentVictim === "1" ? true : false, // Parse as boolean
+// };
+
+// try {
+// const [result] = await connection.execute(
+// "INSERT INTO emergency_help_request_victim_records (Name, Contact, disaster_type, current_location, isCurrentVictim) VALUES (?, ?, ?, ?, ?)",
+// [
+// newRecord.Name,
+// newRecord.Contact,
+// newRecord.disaster_type,
+// newRecord.current_location,
+// newRecord.isCurrentVictim,
+// ]
+// );
+
+// if (result.affectedRows > 0) {
+// res.status(201).json({
+// message: "Emergency help request victim record added successfully",
+// });
+// } else {
+// res.status(500).json({
+// message: "Failed to add emergency help request victim record",
+// });
+// }
+// } catch (error) {
+// console.error("Error adding emergency help request victim record:", error);
+// // Enhanced error handling
+// if (error.code === "ER_DUP_ENTRY") {
+// return res.status(409).json({
+// message: "Emergency help request victim record already exists",
+// });
+// } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
+// return res.status(500).json({ message: "Database access denied" });
+// } else {
+// return res.status(500).json({ message: "Internal Server Error" });
+// }
+// }
+// });
+
+// GET /api/emergency_help_request_victim_records
+app.get("/api/emergency_help_request_victim_records", async (req, res) => {
+ try {
+ const [records] = await connection.execute(
+ "SELECT * FROM emergency_help_request_victim_records"
+ );
+ res.json(records);
+ } catch (error) {
+ console.error(
+ "Error fetching emergency help request victim records:",
+ error
+ );
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+// PUT /api/emergency_help_request_victim_records/:id
+app.put("/api/emergency_help_request_victim_records/:id", async (req, res) => {
+ const id = req.params.id;
+ const updatedRecord = req.body;
+
+ try {
+ const [result] = await connection.execute(
+ "UPDATE emergency_help_request_victim_records SET Name = ?, Contact = ?, disaster_type = ?, current_location = ?, isCurrentVictim = ? WHERE E_ID = ?",
+ [
+ updatedRecord.Name,
+ updatedRecord.Contact,
+ updatedRecord.disaster_type,
+ updatedRecord.current_location,
+ updatedRecord.isCurrentVictim,
+ id,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({
+ message: "Emergency help request victim record updated successfully",
+ });
+ } else {
+ res
+ .status(404)
+ .json({ message: "Emergency help request victim record not found" });
+ }
+ } catch (error) {
+ console.error(
+ "Error updating emergency help request victim record:",
+ error
+ );
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+// DELETE /api/emergency_help_request_victim_records/:id
+app.delete(
+ "/api/emergency_help_request_victim_records/:id",
+ async (req, res) => {
+ const id = req.params.id;
+
+ try {
+ const [result] = await connection.execute(
+ "DELETE FROM emergency_help_request_victim_records WHERE E_ID = ?",
+ [id]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({
+ message: "Emergency help request victim record deleted successfully",
+ });
+ } else {
+ res
+ .status(404)
+ .json({ message: "Emergency help request victim record not found" });
+ }
+ } catch (error) {
+ console.error(
+ "Error deleting emergency help request victim record:",
+ error
+ );
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+ }
+);
+app.post("/api/funds_allocated", async (req, res) => {
+ // Basic input validation
+ if (!req.body.fa_id || !req.body.A_ID || !req.body.amount || !req.body.S_ID) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newFund = {
+ fa_id: req.body.fa_id, // Include fa_id
+ A_ID: req.body.A_ID,
+ amount: req.body.amount,
+ S_ID: req.body.S_ID,
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO funds_allocated (fa_id, A_ID, amount, S_ID) VALUES (?, ?, ?, ?)", // Include fa_id in the query
+ [newFund.fa_id, newFund.A_ID, newFund.amount, newFund.S_ID]
+ );
+
+ if (result.affectedRows > 0) {
+ res.status(201).json({ message: "Fund record added successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to add fund record" });
+ }
+ } catch (error) {
+ console.error("Error adding fund record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.delete("/api/funds_allocated/:fa_id", async (req, res) => {
+ const fa_id = req.params.fa_id;
+
+ try {
+ const [result] = await connection.execute(
+ "DELETE FROM funds_allocated WHERE fa_id = ?",
+ [fa_id]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Fund record deleted successfully" });
+ } else {
+ res.status(404).json({ message: "Fund record not found" });
+ }
+ } catch (error) {
+ console.error("Error deleting fund record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.put("/api/funds_allocated/:fa_id", async (req, res) => {
+ const fa_id = req.params.fa_id;
+ const updatedFund = req.body;
+
+ try {
+ const [result] = await connection.execute(
+ "UPDATE funds_allocated SET A_ID = ?, amount = ?, S_ID = ? WHERE fa_id = ?",
+ [updatedFund.A_ID, updatedFund.amount, updatedFund.S_ID, fa_id]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Fund record updated successfully" });
+ } else {
+ res.status(404).json({ message: "Fund record not found" });
+ }
+ } catch (error) {
+ console.error("Error updating fund record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+app.get("/api/funds_allocated", async (req, res) => {
+ try {
+ const [records] = await connection.execute("SELECT * FROM funds_allocated");
+ res.json(records);
+ } catch (error) {
+ console.error("Error fetching fund records:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.post("/api/aid_supplies", async (req, res) => {
+ // Basic input validation
+ if (
+ !req.body.aid ||
+ !req.body.a_type ||
+ !req.body.a_quantity ||
+ !req.body.a_status ||
+ !req.body.S_ID1
+ ) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newAid = {
+ aid: req.body.aid,
+ a_type: req.body.a_type,
+ a_quantity: req.body.a_quantity,
+ a_status: req.body.a_status,
+ S_ID1: req.body.S_ID1,
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO aid_supplies (aid, a_type, a_quantity, a_status, S_ID1) VALUES (?, ?, ?, ?, ?)",
+ [
+ newAid.aid,
+ newAid.a_type,
+ newAid.a_quantity,
+ newAid.a_status,
+ newAid.S_ID1,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.status(201).json({ message: "Aid record added successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to add aid record" });
+ }
+ } catch (error) {
+ console.error("Error adding aid record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.delete("/api/aid_supplies/:aid", async (req, res) => {
+ const aid = req.params.aid;
+
+ try {
+ const [result] = await connection.execute(
+ "DELETE FROM aid_supplies WHERE aid = ?",
+ [aid]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Aid record deleted successfully" });
+ } else {
+ res.status(404).json({ message: "Aid record not found" });
+ }
+ } catch (error) {
+ console.error("Error deleting aid record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.put("/api/aid_supplies/:aid", async (req, res) => {
+ const aid = req.params.aid;
+ const updatedAid = req.body;
+
+ try {
+ const [result] = await connection.execute(
+ "UPDATE aid_supplies SET a_type = ?, a_quantity = ?, a_status = ?, S_ID1 = ? WHERE aid = ?",
+ [
+ updatedAid.a_type,
+ updatedAid.a_quantity,
+ updatedAid.a_status,
+ updatedAid.S_ID1,
+ aid,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Aid record updated successfully" });
+ } else {
+ res.status(404).json({ message: "Aid record not found" });
+ }
+ } catch (error) {
+ console.error("Error updating aid record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.get("/api/aid_supplies", async (req, res) => {
+ try {
+ const [records] = await connection.execute("SELECT * FROM aid_supplies");
+ res.json(records);
+ } catch (error) {
+ console.error("Error fetching aid records:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.post("/api/rescue_team", async (req, res) => {
+ // Basic input validation
+ if (!req.body.location || !req.body.disaster_id) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newTeam = {
+ location: req.body.location,
+ disaster_id: req.body.disaster_id,
+ leader_id: req.body.leader_id || null, // Assuming leader_id can be nullable
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO rescue_team (location, disaster_id, leader_id) VALUES (?, ?, ?)",
+ [newTeam.location, newTeam.disaster_id, newTeam.leader_id]
+ );
+
+ if (result.affectedRows > 0) {
+ res
+ .status(201)
+ .json({ message: "Rescue team record added successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to add rescue team record" });
+ }
+ } catch (error) {
+ console.error("Error adding rescue team record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.delete("/api/rescue_team/:rid", async (req, res) => {
+ const rid = req.params.rid;
+
+ try {
+ const [result] = await connection.execute(
+ "DELETE FROM rescue_team WHERE rid = ?",
+ [rid]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Rescue team record deleted successfully" });
+ } else {
+ res.status(404).json({ message: "Rescue team record not found" });
+ }
+ } catch (error) {
+ console.error("Error deleting rescue team record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.put("/api/rescue_team/:rid", async (req, res) => {
+ const rid = req.params.rid;
+ const updatedTeam = req.body;
+
+ try {
+ const [result] = await connection.execute(
+ "UPDATE rescue_team SET location = ?, disaster_id = ?, leader_id = ? WHERE rid = ?",
+ [
+ updatedTeam.location,
+ updatedTeam.disaster_id,
+ updatedTeam.leader_id,
+ rid,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Rescue team record updated successfully" });
+ } else {
+ res.status(404).json({ message: "Rescue team record not found" });
+ }
+ } catch (error) {
+ console.error("Error updating rescue team record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.get("/api/rescue_team", async (req, res) => {
+ try {
+ const [records] = await connection.execute("SELECT * FROM rescue_team");
+ res.json(records);
+ } catch (error) {
+ console.error("Error fetching rescue team records:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.post("/api/shelter", async (req, res) => {
+ // Basic input validation
+ if (!req.body.location || !req.body.capacity || !req.body.aid) {
+ return res.status(400).json({ message: "Missing required fields" });
+ }
+
+ const newShelter = {
+ location: req.body.location,
+ capacity: req.body.capacity,
+ aid: req.body.aid,
+ };
+
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO shelter (location, capacity, aid) VALUES (?, ?, ?)",
+ [newShelter.location, newShelter.capacity, newShelter.aid]
+ );
+
+ if (result.affectedRows > 0) {
+ res.status(201).json({ message: "Shelter record added successfully" });
+ } else {
+ res.status(500).json({ message: "Failed to add shelter record" });
+ }
+ } catch (error) {
+ console.error("Error adding shelter record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.delete("/api/shelter/:sid", async (req, res) => {
+ const sid = req.params.sid;
+
+ try {
+ const [result] = await connection.execute(
+ "DELETE FROM shelter WHERE sid = ?",
+ [sid]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Shelter record deleted successfully" });
+ } else {
+ res.status(404).json({ message: "Shelter record not found" });
+ }
+ } catch (error) {
+ console.error("Error deleting shelter record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.put("/api/shelter/:sid", async (req, res) => {
+ const sid = req.params.sid;
+ const updatedShelter = req.body;
+
+ try {
+ const [result] = await connection.execute(
+ "UPDATE shelter SET location = ?, capacity = ?, aid = ? WHERE sid = ?",
+ [
+ updatedShelter.location,
+ updatedShelter.capacity,
+ updatedShelter.aid,
+ sid,
+ ]
+ );
+
+ if (result.affectedRows > 0) {
+ res.json({ message: "Shelter record updated successfully" });
+ } else {
+ res.status(404).json({ message: "Shelter record not found" });
+ }
+ } catch (error) {
+ console.error("Error updating shelter record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.get("/api/shelter", async (req, res) => {
+ try {
+ const [records] = await connection.execute("SELECT * FROM shelter");
+ res.json(records);
+ } catch (error) {
+ console.error("Error fetching shelter records:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+async function startServer() {
+ await connectToDatabase(); // Ensure the database is connected before starting the server
+
+ // Server setup
+ const port = process.env.PORT || 8081;
+ app.listen(port, () => {
+ console.log(`Server started on port ${port}`);
+ });
+}
+
+// JWT Secret
+const JWT_SECRET = process.env.JWT_SECRET || "not_authorized";
+
+// Middleware to check if user is authenticated
+const isAuthenticated = (req, res, next) => {
+ const token = req.headers.authorization;
+ if (!token) {
+ return res.status(401).json({ error: "Unauthorized" });
+ }
+
+ try {
+ const decoded = jwt.verify(token, JWT_SECRET);
+ req.user = decoded;
+ next();
+ } catch (error) {
+ return res.status(401).json({ error: "Unauthorized" });
+ }
+};
+
+// Signup route
+app.post("/signup", async (req, res) => {
+ const { name, email, password } = req.body;
+
+ // Input validation
+ if (!name || !email || !password) {
+ return res
+ .status(400)
+ .json({ error: "Please provide all required fields" });
+ }
+
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+ if (!emailRegex.test(email)) {
+ return res
+ .status(400)
+ .json({ error: "Please enter a valid email address" });
+ }
+
+ try {
+ const hashedPassword = await bcrypt.hash(password, 10); // Hash password
+
+ const [_, fields] = await connection.execute(
+ "INSERT INTO login (name, email, password) VALUES (?, ?, ?)",
+ [name, email, hashedPassword]
+ );
+
+ res.json({ message: "sign up successfully" });
+ } catch (error) {
+ console.error("Database error:", error);
+ // Provide more detailed error messages
+ if (error.code === "ER_ACCESS_DENIED_ERROR") {
+ res.status(500).json({
+ error:
+ "Database access denied. Please check your database credentials.",
+ });
+ } else if (error.code === "ER_NO_SUCH_TABLE") {
+ res.status(500).json({
+ error: "Database table not found. Please check your database schema.",
+ });
+ } else if (error.code === "ER_DUP_ENTRY") {
+ // Handle duplicate entry error
+ res.status(400).json({
+ error: "name already exists. Please choose a different name.",
+ });
+ } else {
+ res.status(500).json({ error: "Internal server error" });
+ }
+ }
+});
+
+// app.post("/login", async (req, res) => {
+// const { email, password } = req.body;
+
+// try {
+// const [rows] = await connection.execute(
+// "SELECT email, password FROM login WHERE email = ?",
+// [email]
+// );
+// const userWithEmail = rows[0];
+
+// if (!userWithEmail) {
+// return res
+// .status(400)
+// .json({ message: "Email or Password does not match!!" });
+// }
+
+// // Compare the provided password with the hashed password from the database
+// const isPasswordValid = await bcrypt.compare(
+// password,
+// userWithEmail.password
+// );
+
+// if (!isPasswordValid) {
+// return res
+// .status(400)
+// .json({ message: "Email or Password does not match!!" });
+// }
+
+// // If the password is valid, generate a JWT token
+// const jwtToken = jwt.sign(
+// { id: userWithEmail.id, email: userWithEmail.email },
+// JWT_SECRET
+// );
+// // var idlogin = connection.query("SELECT idlogin FROM login WHERE email= ?", [
+// // userWithEmail.email,
+// // ]);
+
+// // connection.query("UPDATE login SET count=count+1 WHERE idlogin= '?' ", [
+// // idlogin,
+// // ]);
+// res.json({ message: "Login successful", token: jwtToken });
+// } catch (err) {
+// console.error("Error:", err);
+// res.status(500).json({ message: "Internal Server Error" });
+// }
+// });
+
+app.post("/login", async (req, res) => {
+ const { email, password } = req.body;
+
+ try {
+ const [rows] = await connection.execute(
+ "SELECT email, password FROM login WHERE email = ?",
+ [email]
+ );
+ const userWithEmail = rows[0];
+
+ if (!userWithEmail) {
+ return res
+ .status(400)
+ .json({ message: "Email or Password does not match!!" });
+ }
+
+ // Compare the provided password with the hashed password from the database
+ const isPasswordValid = await bcrypt.compare(
+ password,
+ userWithEmail.password
+ );
+
+ if (!isPasswordValid) {
+ return res
+ .status(400)
+ .json({ message: "Email or Password does not match!!" });
+ }
+
+ // If the password is valid, generate a JWT token
+ const jwtToken = jwt.sign(
+ { id: userWithEmail.id, email: userWithEmail.email },
+ JWT_SECRET
+ );
+
+ // Increment the login count for the user
+ const [idloginResult] = await connection.query(
+ "SELECT idlogin FROM login WHERE email = ?",
+ [userWithEmail.email]
+ );
+ const idlogin = idloginResult[0].idlogin;
+
+ await connection.query(
+ "UPDATE login SET count = count + 1 WHERE idlogin = ?",
+ [idlogin]
+ );
+
+ res.json({ message: "Login successful", token: jwtToken });
+ } catch (err) {
+ console.error("Error:", err);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+app.get("/login/:idlogin", async (req, res) => {
+ const idlogin = req.params.idlogin;
+ try {
+ const [rows] = await connection.execute(
+ "SELECT count FROM login WHERE idlogin = ?",
+ [idlogin]
+ );
+ if (rows.length > 0) {
+ res.json({ loginCount: rows[0].count, idlogin: idlogin });
+ } else {
+ res.status(404).json({ message: "User not found" });
+ }
+ } catch (error) {
+ console.error("Error fetching login count:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+// app.get("/api/:id", isAuthenticated, async (req, res) => {
+// const { id } = req.params;
+// try {
+// const [rows] = await connection.execute(
+// "SELECT * FROM feedback WHERE F_House_No = ?",
+// [id]
+// );
+// const complaintDetails = rows[0];
+// if (!complaintDetails) {
+// return res
+// .status(404)
+// .json({ error: "No complaint details found for the given house ID" });
+// }
+// res.json(complaintDetails);
+// } catch (error) {
+// console.error("Database error:", error);
+// res.status(500).json({ error: "Internal server error" });
+// }
+// });
+// app.get("/login/:idlogin", (req, res) => {
+// const idlogin = req.user.idlogin; // Assuming idlogin is stored in the user object after authentication
+// if (idlogin) {
+// res.json({ idlogin });
+// } else {
+// res.status(401).json({ message: "User not authenticated" });
+// }
+// });
+
+app.post("/adminlogin", async (req, res) => {
+ const { email, password } = req.body;
+
+ try {
+ const [rows] = await connection.execute(
+ "SELECT email, password FROM admin WHERE email = ?",
+ [email]
+ );
+ const userWithEmail = rows[0];
+
+ if (!userWithEmail) {
+ return res
+ .status(400)
+ .json({ message: "Email or Password does not match!!" });
+ }
+
+ // Compare the provided password with the hashed password from the database
+ const isPasswordValid = await bcrypt.compare(
+ password,
+ userWithEmail.password
+ );
+
+ if (!isPasswordValid) {
+ return res
+ .status(400)
+ .json({ message: "Email or Password does not match!!" });
+ }
+
+ // If the password is valid, generate a JWT token
+ const jwtToken = jwt.sign(
+ { id: userWithEmail.id, email: userWithEmail.email },
+ JWT_SECRET
+ );
+
+ res.json({ message: "Login successful", token: jwtToken });
+ } catch (err) {
+ console.error("Error:", err);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+});
+
+startServer();
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs b/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
new file mode 100644
index 00000000..3e212e1d
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
@@ -0,0 +1,21 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:react/recommended',
+ 'plugin:react/jsx-runtime',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
+ settings: { react: { version: '18.2' } },
+ plugins: ['react-refresh'],
+ rules: {
+ 'react/jsx-no-target-blank': 'off',
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore b/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
new file mode 100644
index 00000000..a547bf36
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
new file mode 100644
index 00000000..d9dff28d
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
@@ -0,0 +1,16 @@
+// UserContext.js
+import React, { createContext, useContext, useState } from "react";
+
+const UserContext = createContext();
+
+export const UserProvider = ({ children }) => {
+ const [user, setUser] = useState(null);
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useUser = () => useContext(UserContext);
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/index.html b/Domains/FullStack/MiniProjects/DARE/Frontend/index.html
new file mode 100644
index 00000000..0c589ecc
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite + React
+
+
+
+
+
+
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json b/Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json
new file mode 100644
index 00000000..e69de29b
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/package.json b/Domains/FullStack/MiniProjects/DARE/Frontend/package.json
new file mode 100644
index 00000000..08190de1
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "frontend",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@coreui/icons": "^3.0.1",
+ "@coreui/icons-react": "^2.2.1",
+ "axios": "^1.6.7",
+ "file-loader": "^6.2.0",
+ "react": "^18.2.0",
+ "react-daisyui": "^5.0.0",
+ "react-dom": "^18.2.0",
+ "react-router-dom": "^6.22.3",
+ "react-scripts": "^5.0.1"
+ },
+ "devDependencies": {
+ "@types/react": "^18.2.56",
+ "@types/react-dom": "^18.2.19",
+ "@vitejs/plugin-react": "^4.2.1",
+ "autoprefixer": "^10.4.18",
+ "daisyui": "^4.7.3",
+ "eslint": "^8.56.0",
+ "eslint-plugin-react": "^7.33.2",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.5",
+ "postcss": "^8.4.35",
+ "tailwindcss": "^3.4.1",
+ "vite": "^5.1.4",
+ "vite-plugin-commonjs": "^0.10.1"
+ }
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
new file mode 100644
index 00000000..2aa7205d
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg b/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
new file mode 100644
index 00000000..e7b8dfb1
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
new file mode 100644
index 00000000..7846e8ec
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
@@ -0,0 +1,264 @@
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminAid() {
+ const [assetsData, setAssetsData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingAsset, setEditingAsset] = useState(null);
+ const [newAsset, setNewAsset] = useState({
+ aid: "",
+ a_type: "",
+ a_quantity: "",
+ a_status: "",
+ S_ID1: "",
+ });
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/aid_supplies");
+ const data = await response.json();
+ setAssetsData(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteAsset = async (id) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/aid_supplies/${id}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete asset");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting asset:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/aid_supplies/${editingAsset.aid}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingAsset),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update asset");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating asset:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/aid_supplies", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newAsset),
+ });
+
+ if (!response.ok) {
+ throw new Error("Failed to add asset");
+ }
+
+ console.log("Asset added successfully");
+ setNewAsset({
+ aid: "",
+ a_type: "",
+ a_quantity: "",
+ a_status: "",
+ S_ID1: "",
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding asset:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ ASSETS DATABASE
+
+ Total Assets: {totalItems}
+ setShowAddForm(true)}>Add New Asset
+
+
+
+
+ ID
+ Type
+ Quantity
+ Status
+ S_ID
+ Actions
+
+
+
+ {assetsData.map((asset) => (
+
+ {asset.aid}
+ {asset.a_type}
+ {asset.a_quantity}
+ {asset.a_status}
+ {asset.S_ID1}
+
+ deleteAsset(asset.aid)}
+ >
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingAsset(asset);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
Edit Asset
+
+ setEditingAsset({ ...editingAsset, a_type: e.target.value })
+ }
+ />
+
+ setEditingAsset({ ...editingAsset, a_quantity: e.target.value })
+ }
+ />
+
+ setEditingAsset({ ...editingAsset, a_status: e.target.value })
+ }
+ />
+
+ setEditingAsset({ ...editingAsset, S_ID1: e.target.value })
+ }
+ />
+
+ Update
+
+
+ )}
+
+ {showAddForm && (
+
+
Add New Asset
+
+
+ )}
+
+
+ >
+ );
+}
+
+export default AdminAid;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
new file mode 100644
index 00000000..24683af2
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
@@ -0,0 +1,288 @@
+import { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminDisaster() {
+ const [disasterData, setDisasterData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingItem, setEditingItem] = useState(null);
+ const [newItem, setNewItem] = useState({
+ d_id: "",
+ type: "",
+ date: "",
+ severity: "",
+ shel_id2: "",
+ re_id: "",
+ location: "",
+ });
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/admindisaster");
+ const data = await response.json();
+ setDisasterData(data);
+ setTotalItems(data.length); // Update the totalItems state
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+ const deleteItem = async (d_id) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/admindisaster/${d_id}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete item");
+ }
+ // Optionally, you can refresh the data after deletion
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting item:", error);
+ }
+ };
+ const handleAdd = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/admindisaster", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newItem),
+ });
+
+ if (!response.ok) {
+ throw new Error("Failed to add item");
+ }
+
+ // Assuming success if the response status is 201
+ console.log("Item added successfully");
+ // Clear the newItem state after successful addition
+ setNewItem({
+ d_id: "",
+ type: "",
+ date: "",
+ severity: "",
+ shel_id2: "",
+ re_id: "",
+ location: "",
+ });
+ // Refresh the data after adding
+ fetchData();
+ // Hide the add form after successful addition
+ setShowAddForm(false);
+ } catch (error) {
+ console.error("Error adding item:", error);
+ }
+ };
+
+ const handleUpdate = async (e) => {
+ e.preventDefault();
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/admindisaster/${editingItem.d_id}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingItem),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update item");
+ }
+ // Optionally, refresh the data after updating
+ fetchData();
+ // Hide the edit form after successful update
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating item:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ DISASTER TRACK DATABASE
+
+ Total Items: {totalItems}
{/* Display the total number of items */}
+ setShowAddForm(true)}>Add New Item
+
+
+ {/* head */}
+
+
+ ID
+ Type
+ Date
+ Severity
+ Shelter ID
+ Rescue Team ID
+ Location
+ Actions
+
+
+
+ {disasterData.map((item, index) => (
+
+ {index + 1}
+ {item.type}
+ {item.date}
+ {item.severity}
+ {item.shel_id}
+ {item.re_id}
+ {item.location}
+
+ deleteItem(item.d_id)}>
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingItem(item);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
ID: {editingItem?.d_id}
+
+
+ )}
+ {showAddForm && (
+
+
+
+ )}
+
+ >
+ );
+}
+
+export default AdminDisaster;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
new file mode 100644
index 00000000..78fbfdbf
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
@@ -0,0 +1,908 @@
+// // import React, { useState, useEffect } from "react";
+// // import AdminFooter from "./AdminFooter";
+// // import AdminNavbar from "./AdminNavbar";
+
+// // function AdminEmergency() {
+// // const [emergencyContacts, setEmergencyContacts] = useState([]);
+// // const [totalItems, setTotalItems] = useState(0);
+// // const [showEditForm, setShowEditForm] = useState(false);
+// // const [showAddForm, setShowAddForm] = useState(false);
+// // const [editingContact, setEditingContact] = useState(null);
+// // const [newContact, setNewContact] = useState({
+// // E_ID: "",
+// // Name: "",
+// // Contact: "",
+// // disaster_type: "",
+// // current_location: "",
+// // isCurrentVictim: false,
+// // });
+
+// // useEffect(() => {
+// // fetchData();
+// // }, []);
+
+// // const fetchData = async () => {
+// // try {
+// // const response = await fetch(
+// // "http://localhost:8081/api/emergency_help_request_victim_records"
+// // );
+// // const data = await response.json();
+// // setEmergencyContacts(data);
+// // setTotalItems(data.length);
+// // } catch (error) {
+// // console.error("Error fetching data:", error);
+// // }
+// // };
+
+// // const deleteContact = async (id) => {
+// // try {
+// // const response = await fetch(
+// // `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
+// // {
+// // method: "DELETE",
+// // }
+// // );
+// // if (!response.ok) {
+// // throw new Error("Failed to delete contact");
+// // }
+// // fetchData();
+// // } catch (error) {
+// // console.error("Error deleting contact:", error);
+// // }
+// // };
+
+// // const handleUpdate = async () => {
+// // try {
+// // const response = await fetch(
+// // `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
+// // {
+// // method: "PUT",
+// // headers: {
+// // "Content-Type": "application/json",
+// // },
+// // body: JSON.stringify(editingContact),
+// // }
+// // );
+// // if (!response.ok) {
+// // throw new Error("Failed to update contact");
+// // }
+// // fetchData();
+// // setShowEditForm(false);
+// // } catch (error) {
+// // console.error("Error updating contact:", error);
+// // }
+// // };
+
+// // const handleAdd = async () => {
+// // try {
+// // const response = await fetch(
+// // "http://localhost:8081/api/emergency_help_request_victim_records",
+// // {
+// // method: "POST",
+// // headers: {
+// // "Content-Type": "application/json",
+// // },
+// // body: JSON.stringify(newContact),
+// // }
+// // );
+
+// // if (!response.ok) {
+// // throw new Error("Failed to add contact");
+// // }
+
+// // console.log("Contact added successfully");
+// // setNewContact({
+// // E_ID: "",
+// // Name: "",
+// // Contact: "",
+// // disaster_type: "",
+// // current_location: "",
+// // isCurrentVictim: false,
+// // });
+// // fetchData();
+// // } catch (error) {
+// // console.error("Error adding contact:", error);
+// // }
+// // };
+
+// // return (
+// // <>
+// //
+// //
+// // EMERGENCY CONTACTS DATABASE
+// //
+// // Total Contacts: {totalItems}
+// // setShowAddForm(true)}>Add New Contact
+// //
+// //
+// //
+// //
+// // ID
+// // Name
+// // Contact
+// // Disaster Type
+// // Current Location
+// // Is Current Victim
+// // Actions
+// //
+// //
+// //
+// // {emergencyContacts.map((contact) => (
+// //
+// // {contact.E_ID}
+// // {contact.Name}
+// // {contact.Contact}
+// // {contact.disaster_type}
+// // {contact.current_location}
+// // {contact.isCurrentVictim ? "Yes" : "No"}
+// //
+// // deleteContact(contact.E_ID)}
+// // >
+// // Delete
+// //
+// // {
+// // setShowEditForm(true);
+// // setEditingContact(contact);
+// // }}
+// // >
+// // Edit
+// //
+// //
+// //
+// // ))}
+// //
+// //
+// //
+// // {showEditForm && (
+// //
+// //
Edit Contact
+// //
+// // setEditingContact({ ...editingContact, Name: e.target.value })
+// // }
+// // />
+// //
+// // setEditingContact({ ...editingContact, Contact: e.target.value })
+// // }
+// // />
+// //
+// // setEditingContact({
+// // ...editingContact,
+// // disaster_type: e.target.value,
+// // })
+// // }
+// // />
+// //
+// // setEditingContact({
+// // ...editingContact,
+// // current_location: e.target.value,
+// // })
+// // }
+// // />
+// //
+// // Is Current Victim:
+// //
+// // setEditingContact({
+// // ...editingContact,
+// // isCurrentVictim: e.target.checked,
+// // })
+// // }
+// // />
+// //
+// //
+// // Update
+// //
+// //
+// // )}
+
+// // {showAddForm && (
+// //
+// //
Add New Contact
+// //
+// // {showAddForm && (
+// //
+// //
Add New Contact
+// //
+// //
+// // )}
+// //
+// // )}
+// //
+// // >
+// // );
+// // }
+
+// // export default AdminEmergency;
+// import React, { useState, useEffect } from "react";
+// import AdminFooter from "./AdminFooter";
+// import AdminNavbar from "./AdminNavbar";
+
+// function AdminEmergency() {
+// const [emergencyContacts, setEmergencyContacts] = useState([]);
+// const [totalItems, setTotalItems] = useState(0);
+// const [showEditForm, setShowEditForm] = useState(false);
+// const [showAddForm, setShowAddForm] = useState(false);
+// const [editingContact, setEditingContact] = useState(null);
+// const [newContact, setNewContact] = useState({
+// E_ID: "",
+// Name: "",
+// Contact: "",
+// disaster_type: "",
+// current_location: "",
+// isCurrentVictim: false,
+// });
+
+// useEffect(() => {
+// fetchData();
+// }, []);
+
+// const fetchData = async () => {
+// try {
+// const response = await fetch(
+// "http://localhost:8081/api/emergency_help_request_victim_records"
+// );
+// const data = await response.json();
+// setEmergencyContacts(data);
+// setTotalItems(data.length);
+// } catch (error) {
+// console.error("Error fetching data:", error);
+// }
+// };
+
+// const deleteContact = async (id) => {
+// try {
+// const response = await fetch(
+// `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
+// {
+// method: "DELETE",
+// }
+// );
+// if (!response.ok) {
+// throw new Error("Failed to delete contact");
+// }
+// fetchData();
+// } catch (error) {
+// console.error("Error deleting contact:", error);
+// }
+// };
+
+// const handleUpdate = async () => {
+// try {
+// const response = await fetch(
+// `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
+// {
+// method: "PUT",
+// headers: {
+// "Content-Type": "application/json",
+// },
+// body: JSON.stringify(editingContact),
+// }
+// );
+// if (!response.ok) {
+// throw new Error("Failed to update contact");
+// }
+// fetchData();
+// setShowEditForm(false);
+// } catch (error) {
+// console.error("Error updating contact:", error);
+// }
+// };
+
+// const handleAdd = async () => {
+// try {
+// const response = await fetch(
+// "http://localhost:8081/api/emergency_help_request_victim_records",
+// {
+// method: "POST",
+// headers: {
+// "Content-Type": "application/json",
+// },
+// body: JSON.stringify(newContact),
+// }
+// );
+
+// if (!response.ok) {
+// throw new Error("Failed to add contact");
+// }
+
+// console.log("Contact added successfully");
+// setNewContact({
+// E_ID: "",
+// Name: "",
+// Contact: "",
+// disaster_type: "",
+// current_location: "",
+// isCurrentVictim: false,
+// });
+// fetchData();
+// } catch (error) {
+// console.error("Error adding contact:", error);
+// }
+// };
+
+// const [searchTerm, setSearchTerm] = useState("");
+// // Function to filter contacts based on search term
+// useEffect(() => {
+// searchContacts();
+// }, [searchTerm]);
+
+// return (
+// <>
+//
+//
+//
+// VICTIM DATA
+//
+//
+// Total No: {totalItems}
+//
+//
+// {
+// setSearchTerm(e.target.value);
+// console.log("Search Term:", e.target.value);
+// }}
+// />
+//
+//
setShowAddForm(true)}
+// >
+// Add New Victim
+//
+//
+//
+//
+//
+// ID
+// Name
+// Contact
+// Disaster Type
+// Current Location
+// Is Current Victim
+// Actions
+//
+//
+//
+// {emergencyContacts.map((contact) => (
+//
+// {contact.E_ID}
+// {contact.Name}
+// {contact.Contact}
+// {contact.disaster_type}
+// {contact.current_location}
+// {contact.isCurrentVictim ? "Yes" : "No"}
+//
+// {/* deleteContact(contact.E_ID)}
+// >
+// Delete
+//
+// */}
+// {
+// setShowEditForm(true);
+// setEditingContact(contact);
+// }}
+// >
+// Edit
+//
+//
+//
+// ))}
+//
+//
+//
+// {showEditForm && (
+//
+//
+// Edit Contact
+//
+//
+// setEditingContact({ ...editingContact, E_ID: e.target.value })
+// }
+// />
+//
+//
+// setEditingContact({ ...editingContact, Name: e.target.value })
+// }
+// />
+//
+//
+// setEditingContact({
+// ...editingContact,
+// Contact: e.target.value,
+// })
+// }
+// />
+//
+//
+// setEditingContact({
+// ...editingContact,
+// disaster_type: e.target.value,
+// })
+// }
+// />
+//
+//
+// setEditingContact({
+// ...editingContact,
+// current_location: e.target.value,
+// })
+// }
+// />
+//
+//
+// Is Current Victim:
+//
+// setEditingContact({
+// ...editingContact,
+// isCurrentVictim: e.target.checked,
+// })
+// }
+// />
+//
+//
+//
+// Update
+//
+//
+// )}
+
+// {showAddForm && (
+//
+//
+// Add New Contact
+//
+//
+//
+// )}
+//
+//
+// >
+// );
+// }
+
+// export default AdminEmergency;
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminEmergency() {
+ const [emergencyContacts, setEmergencyContacts] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingContact, setEditingContact] = useState(null);
+ const [newContact, setNewContact] = useState({
+ E_ID: "",
+ Name: "",
+ Contact: "",
+ disaster_type: "",
+ current_location: "",
+ isCurrentVictim: false,
+ });
+ const [searchTerm, setSearchTerm] = useState("");
+ const [filterCriteria, setFilterCriteria] = useState("");
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ useEffect(() => {
+ filterContacts();
+ }, [emergencyContacts, filterCriteria]);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/emergency_help_request_victim_records"
+ );
+ const data = await response.json();
+ setEmergencyContacts(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteContact = async (id) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete contact");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting contact:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingContact),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update contact");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating contact:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/emergency_help_request_victim_records",
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newContact),
+ }
+ );
+
+ if (!response.ok) {
+ throw new Error("Failed to add contact");
+ }
+
+ console.log("Contact added successfully");
+ setNewContact({
+ E_ID: "",
+ Name: "",
+ Contact: "",
+ disaster_type: "",
+ current_location: "",
+ isCurrentVictim: false,
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding contact:", error);
+ }
+ };
+
+ const filterContacts = () => {
+ let filteredContacts = emergencyContacts;
+ if (filterCriteria) {
+ filteredContacts = filteredContacts.filter(
+ (contact) => contact.disaster_type === filterCriteria
+ );
+ }
+ if (searchTerm) {
+ filteredContacts = filteredContacts.filter((contact) =>
+ contact.Name.toLowerCase().includes(searchTerm.toLowerCase())
+ );
+ }
+ setEmergencyContacts(filteredContacts);
+ };
+
+ return (
+ <>
+
+
+
+ VICTIM DATA
+
+
+ Total No: {totalItems}
+
+
+ {/* {
+ setSearchTerm(e.target.value);
+ }}
+ /> */}
+ {
+ setFilterCriteria(e.target.value);
+ }}
+ >
+ Filter by Disaster Type
+ Flood
+ Earthquake
+ Fire
+ Hurricane
+ Cyclone
+ {/* Add other disaster types */}
+
+
+
setShowAddForm(true)}
+ >
+ Add New Victim
+
+
+
+
+
+ ID
+ Name
+ Contact
+ Disaster Type
+ Current Location
+ Is Current Victim
+ Actions
+
+
+
+ {emergencyContacts.map((contact) => (
+
+ {contact.E_ID}
+ {contact.Name}
+ {contact.Contact}
+ {contact.disaster_type}
+ {contact.current_location}
+ {contact.isCurrentVictim ? "Yes" : "No"}
+
+ {
+ setShowEditForm(true);
+ setEditingContact(contact);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
+ Edit Contact
+
+ {/* Input fields for editing contact */}
+
+ )}
+ {showAddForm && (
+
+
+ Add New Contact
+
+ {/* Form for adding new contact */}
+
+ )}
+
+
+ >
+ );
+}
+
+export default AdminEmergency;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
new file mode 100644
index 00000000..d8db61c7
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
@@ -0,0 +1,64 @@
+import { Link } from "react-router-dom";
+
+function AdminFooter() {
+ return (
+
+ );
+}
+
+export default AdminFooter;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
new file mode 100644
index 00000000..d6cbe765
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
@@ -0,0 +1,251 @@
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminFunds() {
+ const [fundsData, setFundsData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingFund, setEditingFund] = useState(null);
+ const [newFund, setNewFund] = useState({
+ fa_id: "",
+ A_ID: "",
+ amount: "",
+ S_ID: "",
+ });
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/funds_allocated");
+ const data = await response.json();
+ setFundsData(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteFund = async (id) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/funds_allocated/${id}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete fund");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting fund:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/funds_allocated/${editingFund.fa_id}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingFund),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update fund");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating fund:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/funds_allocated",
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newFund),
+ }
+ );
+
+ if (!response.ok) {
+ throw new Error("Failed to add fund");
+ }
+
+ console.log("Fund added successfully");
+ setNewFund({
+ fa_id: "",
+ A_ID: "",
+ amount: "",
+ S_ID: "",
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding fund:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ FUNDS ALLOCATED DATABASE
+
+ Total Funds: {totalItems}
+ setShowAddForm(true)}>Add New Fund
+
+
+
+
+ ID
+ A_ID
+ Amount
+ S_ID
+ Actions
+
+
+
+ {fundsData.map((fund) => (
+
+ {fund.fa_id}
+ {fund.A_ID}
+ {fund.amount}
+ {fund.S_ID}
+
+ deleteFund(fund.fa_id)}
+ >
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingFund(fund);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
Edit Fund
+
+ setEditingFund({ ...editingFund, fa_id: e.target.value })
+ }
+ />
+
+ setEditingFund({ ...editingFund, A_ID: e.target.value })
+ }
+ />
+
+ setEditingFund({ ...editingFund, amount: e.target.value })
+ }
+ />
+
+ setEditingFund({ ...editingFund, S_ID: e.target.value })
+ }
+ />
+
+ Update
+
+
+ )}
+
+ {showAddForm && (
+
+
Add New Fund
+
+
+ )}
+
+ >
+ );
+}
+
+export default AdminFunds;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
new file mode 100644
index 00000000..42555d1e
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
@@ -0,0 +1,114 @@
+import { useState } from "react";
+import { Link, useNavigate } from "react-router-dom";
+
+const AdminLogin = () => {
+ const navigate = useNavigate();
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ const [error, setError] = useState("");
+
+ const handleLogin = async (e) => {
+ e.preventDefault();
+
+ if (email === "admin@gmail.com" && password === "admin@12345") {
+ // If the credentials match, navigate to the admin home page
+ navigate("/adminhome");
+ } else {
+ // If the credentials do not match, set an error message
+ setError("Invalid credentials. Please try again.");
+ }
+ };
+
+ return (
+ //
+ //
Admin Login
+ //
+ //
+ <>
+
+
+
+
Admin Login
+
+ Welcome back! Login to continue.
+
+
+
+
+
+ >
+ );
+};
+
+export default AdminLogin;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
new file mode 100644
index 00000000..c7e154e3
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
@@ -0,0 +1,162 @@
+import { useNavigate } from "react-router-dom";
+import "./App.css";
+import "./index.css";
+
+export default function AdminNavbar() {
+ const navigate = useNavigate();
+
+ const handleLogout = () => {
+ // Perform logout logic here
+ navigate("/"); // Route to /adminlogin after logout
+ };
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
new file mode 100644
index 00000000..47f83db2
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
@@ -0,0 +1,245 @@
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminRescue() {
+ const [rescueData, setRescueData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingRescue, setEditingRescue] = useState(null);
+ const [newRescue, setNewRescue] = useState({
+ rid: "",
+ location: "",
+ disaster_id: "",
+ leader_id: "",
+ });
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/rescue_team");
+ const data = await response.json();
+ setRescueData(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteRescue = async (id) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/rescue_team/${id}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete rescue team");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting rescue team:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/rescue_team/${editingRescue.rid}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingRescue),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update rescue team");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating rescue team:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/rescue_team", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newRescue),
+ });
+
+ if (!response.ok) {
+ throw new Error("Failed to add rescue team");
+ }
+
+ console.log("Rescue team added successfully");
+ setNewRescue({
+ rid: "",
+ location: "",
+ disaster_id: "",
+ leader_id: "",
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding rescue team:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ RESCUE TEAMS DATABASE
+
+ Total Rescue Teams: {totalItems}
+ setShowAddForm(true)}>Add New Rescue Team
+
+
+
+
+ ID
+ Location
+ Disaster ID
+ Leader ID
+ Actions
+
+
+
+ {rescueData.map((rescue) => (
+
+ {rescue.rid}
+ {rescue.location}
+ {rescue.disaster_id}
+ {rescue.leader_id}
+
+ deleteRescue(rescue.rid)}
+ >
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingRescue(rescue);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
Edit Rescue Team
+
+ setEditingRescue({ ...editingRescue, location: e.target.value })
+ }
+ />
+
+ setEditingRescue({
+ ...editingRescue,
+ disaster_id: e.target.value,
+ })
+ }
+ />
+
+ setEditingRescue({ ...editingRescue, leader_id: e.target.value })
+ }
+ />
+
+ Update
+
+
+ )}
+
+ {showAddForm && (
+
+
Add New Rescue Team
+
+
+ )}
+
+
+ >
+ );
+}
+
+export default AdminRescue;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
new file mode 100644
index 00000000..e5964850
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
@@ -0,0 +1,259 @@
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminShelters() {
+ const [shelterData, setShelterData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingShelter, setEditingShelter] = useState(null);
+ const [newShelter, setNewShelter] = useState({
+ sid: "",
+ location: "",
+ capacity: "",
+ aid: "",
+ });
+ const [currentLocation, setCurrentLocation] = useState("");
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/shelter");
+ const data = await response.json();
+ setShelterData(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteShelter = async (id) => {
+ try {
+ const response = await fetch(`http://localhost:8081/api/shelter/${id}`, {
+ method: "DELETE",
+ });
+ if (!response.ok) {
+ throw new Error("Failed to delete shelter");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting shelter:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/shelter/${editingShelter.sid}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingShelter),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update shelter");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating shelter:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/shelter", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newShelter),
+ });
+
+ if (!response.ok) {
+ throw new Error("Failed to add shelter");
+ }
+
+ console.log("Shelter added successfully");
+ setNewShelter({
+ sid: "",
+ location: "",
+ capacity: "",
+ aid: "",
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding shelter:", error);
+ }
+ };
+ const handleLocationChange = (e) => {
+ setCurrentLocation(e.target.value);
+ };
+
+ const filteredShelterData = shelterData.filter((shelter) =>
+ shelter.location.toLowerCase().includes(currentLocation.toLowerCase())
+ );
+
+ return (
+ <>
+
+
+ SHELTERS DATABASE
+
+
+
+ What is your current Location?
+
+
+
+ Total Shelters: {totalItems}
+ setShowAddForm(true)}>Add New Shelter
+
+
+
+
+ ID
+ Location
+ Capacity
+ AID
+ Actions
+
+
+
+ {filteredShelterData.map((shelter) => (
+
+ {shelter.sid}
+ {shelter.location}
+ {shelter.capacity}
+ {shelter.aid}
+
+ deleteShelter(shelter.sid)}
+ >
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingShelter(shelter);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
Edit Shelter
+
+ setEditingShelter({ ...editingShelter, location: e.target.value })
+ }
+ />
+
+ setEditingShelter({ ...editingShelter, capacity: e.target.value })
+ }
+ />
+
+ setEditingShelter({ ...editingShelter, aid: e.target.value })
+ }
+ />
+
+ Update
+
+
+ )}
+
+ {showAddForm && (
+
+
Add New Shelter
+
+
+ )}
+
+
+ >
+ );
+}
+
+export default AdminShelters;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
new file mode 100644
index 00000000..e821a901
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
@@ -0,0 +1,7 @@
+import React from "react";
+
+function AdminVolunteer() {
+ return AdminVolunteer
;
+}
+
+export default AdminVolunteer;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
new file mode 100644
index 00000000..a2e7c4fd
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
@@ -0,0 +1,234 @@
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function Adminhome() {
+ return (
+ <>
+
+
+
+
+
+
+
DARE
+
+
+ Building stronger communities, one disaster at a time.
+
+
+
+ Connecting those in need with the help they deserve
+
+
+
+
+
+
+
+
Hello Admin
+
+ Welcome back, Admin! You are now logged in to the disaster
+ awareness and rescue engine app.
+
+
+
+
+
+ What is DARE?
+
+
+
+
+
+ Oh no, the weather reports are saying a Category 5 hurricane is
+ heading straight for us! What are we going to do?!
+
+
+
+
+ Don't worry, DARE is here to help! We've been monitoring the
+ situation closely and have evacuation plans in place. We'll help
+ you.
+
+
+
+
+ I just felt the ground shaking! Was that an earthquake? I'm so
+ scared!
+
+
+
+
+ DARE is trained to handle these situations. Take cover under a
+ sturdy table or desk and hold on until the shaking stops.
+
+
+
+
+ I see smoke rising in the distance! There must be a wildfire
+ nearby! Are we in danger?
+
+
+
+
+ DARE is already assessing the situation and coordinating with
+ firefighters. We'll send out alerts if evacuations are necessary.
+
+
+
+
+ The blizzard is getting worse! The roads are already impassable,
+ and we're running low on supplies!
+
+
+
+
+ DARE is aware of the blizzard conditions. We're working on
+ clearing roads and getting essential supplies to affected areas.
+
+
+
+
+
+ About DARE
+
+
+
+
+ DARE, a disaster awareness and rescue engine, is your one-stop
+ platform for everything disaster-related: preparedness, real-time
+ emergency response, and vital rescue coordination. Empower yourself
+ and your community with the knowledge and tools to navigate any
+ disaster. Don't be caught off guard โ with DARE, you'll have access
+ to expert-curated resources, 24/7 support, and a direct line to
+ emergency services during critical moments. Whether you're facing a
+ powerful hurricane, a devastating earthquake, or a sudden flood,
+ DARE provides peace of mind knowing help is just a click away. Build
+ a comprehensive survival plan, receive real-time updates on
+ unfolding events, and connect with rescue teams seamlessly โ all
+ through DARE's user-friendly interface.
+
+
+
+
+ DARE Features
+
+
+
+
+
+ Learn about potential hazards in your area and access essential
+ survival skills.
+
+
+
+
+ Connect with volunteers and first responders during emergencies.
+
+
+
+
+ Enable faster and more coordinated rescue efforts. Save lives in
+ critical moments.
+
+
+
+
+ {/*
+
+ Join DARE!
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand
+ during disasters. Join our network of caring individuals who
+ make a difference in times of crisis. We connect People Who Want
+ to Help.
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're
+ not alone!
+
+
+
+ */}
+
+
+ Join DARE!
+
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand during
+ disasters.
+
+
+ Join our network of caring individuals who make a difference in
+ times of crisis. We connect People Who Want to Help.
+
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're not
+ alone!
+
+
+
+
+ >
+ );
+}
+export default Adminhome;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
new file mode 100644
index 00000000..747e7a6f
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
@@ -0,0 +1,202 @@
+import React, { useState, useEffect } from "react";
+import AdminFooter from "./AdminFooter";
+import AdminNavbar from "./AdminNavbar";
+
+function AdminSafety() {
+ const [safetyInstructions, setSafetyInstructions] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [showEditForm, setShowEditForm] = useState(false);
+ const [showAddForm, setShowAddForm] = useState(false);
+ const [editingInstruction, setEditingInstruction] = useState(null);
+ const [newInstruction, setNewInstruction] = useState({
+ did: "",
+ safety_instructions: "",
+ });
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/safety_instructions"
+ );
+ const data = await response.json();
+ setSafetyInstructions(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const deleteInstruction = async (did) => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/safety_instructions/${did}`,
+ {
+ method: "DELETE",
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to delete instruction");
+ }
+ fetchData();
+ } catch (error) {
+ console.error("Error deleting instruction:", error);
+ }
+ };
+
+ const handleUpdate = async () => {
+ try {
+ const response = await fetch(
+ `http://localhost:8081/api/safety_instructions/${editingInstruction.did}`,
+ {
+ method: "PUT",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(editingInstruction),
+ }
+ );
+ if (!response.ok) {
+ throw new Error("Failed to update instruction");
+ }
+ fetchData();
+ setShowEditForm(false);
+ } catch (error) {
+ console.error("Error updating instruction:", error);
+ }
+ };
+
+ const handleAdd = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/safety_instructions",
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newInstruction),
+ }
+ );
+
+ if (!response.ok) {
+ throw new Error("Failed to add instruction");
+ }
+
+ console.log("Instruction added successfully");
+ setNewInstruction({ did: "", safety_instructions: "" });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding instruction:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+ SAFETY INSTRUCTIONS DATABASE
+
+ Total Instructions: {totalItems}
+ setShowAddForm(true)}>Add New Instruction
+
+
+
+
+ ID
+ Safety Instructions
+ Actions
+
+
+
+ {safetyInstructions.map((instruction) => (
+
+ {instruction.did}
+ {instruction.safety_instructions}
+
+ deleteInstruction(instruction.did)}
+ >
+ Delete
+
+ {
+ setShowEditForm(true);
+ setEditingInstruction(instruction);
+ }}
+ >
+ Edit
+
+
+
+ ))}
+
+
+
+ {showEditForm && (
+
+
Edit Instruction
+
+ setEditingInstruction({
+ ...editingInstruction,
+ safety_instructions: e.target.value,
+ })
+ }
+ />
+
+ Update
+
+
+ )}
+ {showAddForm && (
+
+
Add New Instruction
+
+
+ )}
+
+
+ >
+ );
+}
+
+export default AdminSafety;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
new file mode 100644
index 00000000..7eedc2ad
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
@@ -0,0 +1,9 @@
+/* src/index.css or src/tailwind.css */
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "tailwindcss/utilities";
+/* App.css */
+.btn.btn-primary {
+ padding: 0.2rem 1rem; /* Adjust padding to reduce button size */
+ font-size: 0.8rem; /* Adjust font size to reduce button size */
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
new file mode 100644
index 00000000..8562f859
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
@@ -0,0 +1,55 @@
+import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
+import LoginForm from "./LoginForm";
+import SignupForm from "./SignupForm";
+import Home from "./Home";
+import "./App.css";
+import SafetyInstructions from "./SafetyInstructions";
+import DisasterTrack from "./DisasterTrack";
+import SheltersandRescueTeams from "./Shelters&RescueTeams";
+import FundsandAidSupplies from "./Funds&AidSupplies";
+import AdminLogin from "./AdminLogin";
+import Adminhome from "./Adminhome";
+import Adminsafety from "./Adminsafety";
+import AdminDisaster from "./AdminDisaster";
+import AdminShelter from "./AdminShelter";
+import AdminFunds from "./AdminFunds";
+import AdminEmergency from "./AdminEmergency";
+import AdminAid from "./AdminAid";
+import AdminRescue from "./AdminRescue";
+import DefaultHome from "./DefaultHome";
+
+import VolunteerRegistrationForm from "./VolunteerRegistration";
+
+import Donateform from "./Donateform";
+import AdminVolunteer from "./AdminVolunteer";
+
+const App = () => {
+ return (
+
+
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+
+
+ );
+};
+
+export default App;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
new file mode 100644
index 00000000..0d71199d
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
@@ -0,0 +1,417 @@
+// import Navbar from "./Navbar";
+// import "./App.css";
+// import Footer from "./Footer";
+// import DefaultNavbar from "./DefaultNavbar";
+// function DefaultHome() {
+// return (
+// <>
+//
+//
+//
+//
+//
DARE
+//
+//
+// Building stronger communities, one disaster at a time.
+//
+//
+//
+// Connecting those in need with the help they deserve
+//
+//
+//
+//
+//
+// What is DARE?
+//
+//
+//
+//
+//
+// Oh no, the weather reports are saying a Category 5 hurricane is
+// heading straight for us! What are we going to do?!
+//
+//
+//
+//
+// Don't worry, DARE is here to help! We've been monitoring the
+// situation closely and have evacuation plans in place. We'll help
+// you.
+//
+//
+//
+//
+// I just felt the ground shaking! Was that an earthquake? I'm so
+// scared!
+//
+//
+//
+//
+// DARE is trained to handle these situations. Take cover under a
+// sturdy table or desk and hold on until the shaking stops.
+//
+//
+//
+//
+// I see smoke rising in the distance! There must be a wildfire
+// nearby! Are we in danger?
+//
+//
+//
+//
+// DARE is already assessing the situation and coordinating with
+// firefighters. We'll send out alerts if evacuations are necessary.
+//
+//
+//
+//
+// The blizzard is getting worse! The roads are already impassable,
+// and we're running low on supplies!
+//
+//
+//
+//
+// DARE is aware of the blizzard conditions. We're working on
+// clearing roads and getting essential supplies to affected areas.
+//
+//
+//
+
+//
+// About DARE
+//
+// DARE, a disaster awareness and rescue engine, is your one-stop
+// platform for everything disaster-related: preparedness, real-time
+// emergency response, and vital rescue coordination. Empower yourself
+// and your community with the knowledge and tools to navigate any
+// disaster. Don't be caught off guard โ with DARE, you'll have access to
+// expert-curated resources, 24/7 support, and a direct line to emergency
+// services during critical moments. Whether you're facing a powerful
+// hurricane, a devastating earthquake, or a sudden flood, DARE provides
+// peace of mind knowing help is just a click away. Build a comprehensive
+// survival plan, receive real-time updates on unfolding events, and
+// connect with rescue teams seamlessly โ all through DARE's
+// user-friendly interface.
+//
+//
+// DARE Features
+//
+//
+//
+//
+//
+// Learn about potential hazards in your area and access
+// essential survival skills.
+//
+//
+//
+//
+// Connect with volunteers and first responders during
+// emergencies.
+//
+//
+//
+//
+// Enable faster and more coordinated rescue efforts. Save lives
+// in critical moments.
+//
+//
+//
+//
+//
+// Join DARE!
+//
+//
+//
+//
+//
+//
+
+//
+// Become a hero! Sign up as a volunteer to lend a helping hand
+// during disasters. Sign up as a volunteer to lend a helping hand
+// during disasters. Join our network of caring individuals who
+// make a difference in times of crisis. We connect People Who Want
+// to Help.
+//
+//
+
+//
+//
+// Use DARE!
+//
+//
+//
+//
+//
+//
+//
Get Help Now!
+//
+// Connecting survivors with the help they need quickly. You're
+// not alone!
+//
+//
+//
+//
+//
+//
+//
+// >
+// );
+// }
+
+// export default DefaultHome;
+import Navbar from "./Navbar";
+import "./App.css";
+import Footer from "./Footer";
+import DefaultNavbar from "./DefaultNavbar";
+import { useNavigate } from "react-router-dom";
+function DefaultHome() {
+ const navigate = useNavigate();
+ return (
+ <>
+
+
+
+
+
+
+
DARE
+
+
+ Building stronger communities, one disaster at a time.
+
+
+
+ Connecting those in need with the help they deserve
+
+
+
+
+
+
+ What is DARE?
+
+
+
+
+
+ Oh no, the weather reports are saying a Category 5 hurricane is
+ heading straight for us! What are we going to do?!
+
+
+
+
+ Don't worry, DARE is here to help! We've been monitoring the
+ situation closely and have evacuation plans in place. We'll help
+ you.
+
+
+
+
+ I just felt the ground shaking! Was that an earthquake? I'm so
+ scared!
+
+
+
+
+ DARE is trained to handle these situations. Take cover under a
+ sturdy table or desk and hold on until the shaking stops.
+
+
+
+
+ I see smoke rising in the distance! There must be a wildfire
+ nearby! Are we in danger?
+
+
+
+
+ DARE is already assessing the situation and coordinating with
+ firefighters. We'll send out alerts if evacuations are necessary.
+
+
+
+
+ The blizzard is getting worse! The roads are already impassable,
+ and we're running low on supplies!
+
+
+
+
+ DARE is aware of the blizzard conditions. We're working on
+ clearing roads and getting essential supplies to affected areas.
+
+
+
+
+
+ About DARE
+
+
+
+
+ DARE, a disaster awareness and rescue engine, is your one-stop
+ platform for everything disaster-related: preparedness, real-time
+ emergency response, and vital rescue coordination. Empower yourself
+ and your community with the knowledge and tools to navigate any
+ disaster. Don't be caught off guard โ with DARE, you'll have access
+ to expert-curated resources, 24/7 support, and a direct line to
+ emergency services during critical moments. Whether you're facing a
+ powerful hurricane, a devastating earthquake, or a sudden flood,
+ DARE provides peace of mind knowing help is just a click away. Build
+ a comprehensive survival plan, receive real-time updates on
+ unfolding events, and connect with rescue teams seamlessly โ all
+ through DARE's user-friendly interface.
+
+
+
+
+ DARE Features
+
+
+
+
+
+ Learn about potential hazards in your area and access essential
+ survival skills.
+
+
+
+
+ Connect with volunteers and first responders during emergencies.
+
+
+
+
+ Enable faster and more coordinated rescue efforts. Save lives in
+ critical moments.
+
+
+
+
+ {/*
+
+ Join DARE!
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand
+ during disasters. Join our network of caring individuals who
+ make a difference in times of crisis. We connect People Who Want
+ to Help.
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're
+ not alone!
+
+
+
+ */}
+
+
+ Join DARE!
+
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand during
+ disasters.
+
+
+ Join our network of caring individuals who make a difference in
+ times of crisis. We connect People Who Want to Help.
+
+ {/*
navigate("/v")}
+ className="btn btn-outline btn-primary w-full"
+ >
+ Sign Up
+ */}
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're not
+ alone!
+
+
navigate("/safety")}
+ className="btn btn-outline btn-primary w-full"
+ >
+ Get Help
+
+
+
+
+
+ >
+ );
+}
+
+export default DefaultHome;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
new file mode 100644
index 00000000..0a8abe03
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
@@ -0,0 +1,491 @@
+// // import { useNavigate } from "react-router-dom";
+// // import "./App.css";
+// // import "./index.css";
+
+// // export default function DefaultNavbar() {
+// // const navigate = useNavigate();
+// // const handleLogin = () => {
+// // // Perform logout logic here
+// // navigate("/login"); // Route to /adminlogin after logout
+// // };
+// // return (
+// //
+// //
+// //
+// //
+// //
+// //
+// //
+// //
+// //
+// //
+// //
DARE
+// //
+// //
+// //
+// //
+// //
+// //
+// // Login
+// //
+// //
+// //
+// //
+// //
+// // );
+// // }
+// import { useNavigate } from "react-router-dom";
+// import "./App.css";
+// import "./index.css";
+
+// export default function DefaultNavbar() {
+// const navigate = useNavigate();
+
+// const handleLogin = () => {
+// // Perform logout logic here
+// navigate("/login"); // Route to /adminlogin after logout
+// };
+
+// return (
+//
+//
+//
+//
+//
+//
+//
+// Login
+//
+//
+//
+//
+//
+// );
+// }
+// import { useNavigate } from "react-router-dom";
+// import "./App.css";
+// import "./index.css";
+// export default function Navbar() {
+// const navigate = useNavigate();
+// const handleLogout = () => {
+// // Perform logout logic here
+// navigate("/login"); // Route to /adminlogin after logout
+// };
+// return (
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// );
+// }
+import { useNavigate } from "react-router-dom";
+import "./App.css";
+import "./index.css";
+import { useEffect, useState } from "react";
+
+export default function DefaultNavbar() {
+ const navigate = useNavigate();
+ // const [loginCount, setLoginCount] = useState(0);
+
+ // useEffect(() => {
+ // fetchLoginCount();
+ // }, []);
+
+ // const fetchLoginCount = async () => {
+ // try {
+ // const response = await fetch("/login");
+ // const data = await response.json();
+ // setLoginCount(data.loginCount);
+ // } catch (error) {
+ // console.error("Error fetching login count:", error);
+ // }
+ // };
+ const handleLogin = () => {
+ // Perform logout logic here
+ navigate("/login"); // Route to /login after logout
+ };
+
+ return (
+
+
+
+
+ {/*
+
+
+
+
*/}
+ {/*
+
*/}
+ {/*
*/}
+ {/*
Login Count: 6
*/}
+ {/*
+
Login Count: 6 {loginCount}
*/}
+
+ Login
+
+
+
+ );
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
new file mode 100644
index 00000000..82a2e949
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
@@ -0,0 +1,383 @@
+import { useEffect, useState } from "react";
+import Footer from "./Footer";
+import Navbar from "./Navbar";
+import "./index.css";
+function DisasterTrack() {
+ const [disasterData, setDisasterData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/admindisaster");
+ const data = await response.json();
+ setDisasterData(data);
+ setTotalItems(data.length); // Update the totalItems state
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+ return (
+ <>
+
+ {/*
+
+
+
+
+
+ New disaster alert!
+
+
+
+
+ ****** 3.8 Magnitude | Churachandpur, Manipur | 13 Mar 2024
+ 13:50:58 ******
+
+
+
+
+
+
+
+
+
+
+
+ New disaster alert!
+
+
+
+
+ ****** 4.2 Magnitude | Andaman Sea | 12 Mar 2024 23:32:00******
+
+
+
+
+
+
+
+
+
+
+
+
+ New disaster alert!
+
+
+
+
+ ****** 3.9 Magnitude | Afghanistan | 12 Mar 2024 22:26:01******
+
+
+
+
+
*/}
+
+
+
+
+
+
+
+ New disaster alert!
+
+ {/*
+
+
+ ****** 4.0 Magnitude | West Garo Hills, Meghalaya | 12 Mar 2024
+ 14:27:53******
+
+
+
*/}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/*
+
+
+ Avalanche in Kinnaur, Kullu, Lahul, Spiti districts of Himachal
+ Pradesh
+
+
+
+
+
+
+ Thunderstorm with lightning in Jhagram district of West Bengal
+
+
+
+
+
+
+ Light rain in Jaiur, Alwar, Bharatpur
+
+
+
+
+
+
+ Heat wave in Visakhapatnam of Andhra Pradesh
+
+
+
+
+
+
+ Pre-fire alert in Madhya Pradesh
+
+
+
+
+
+
+ Pre-fire alert in Mizoram, Maharashtra
+
+
+
+
+ */}
+
+
+
+ >
+ );
+}
+
+export default DisasterTrack;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
new file mode 100644
index 00000000..eec12476
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
@@ -0,0 +1,7 @@
+import React from "react";
+
+function Donateform() {
+ return Donteform
;
+}
+
+export default Donateform;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
new file mode 100644
index 00000000..f4fb1323
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
@@ -0,0 +1,143 @@
+// import { Link } from "react-router-dom";
+
+// function Footer() {
+// return (
+//
+// );
+// }
+
+// export default Footer;
+// import { Link } from "react-router-dom";
+
+// function Footer() {
+// return (
+//
+//
+//
+//
+//
+//
+//
+// DARE
+//
+// Connecting People Who Can Help to Those in Need.
+//
+//
+//
+//
+//
+//
+// Emergency Help Request Facility & Safety Instructions
+//
+//
+//
+//
+// Disaster Track
+//
+//
+//
+//
+// Shelter & Rescue Teams
+//
+//
+//
+//
+// Funds & Aids Supplies
+//
+//
+//
+//
+//
+//
+// );
+// }
+
+// export default Footer;
+import { Link } from "react-router-dom";
+
+function Footer() {
+ return (
+
+ );
+}
+
+export default Footer;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
new file mode 100644
index 00000000..2d7105cf
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
@@ -0,0 +1,107 @@
+import { useNavigate } from "react-router-dom";
+import Footer from "./Footer";
+import Navbar from "./Navbar";
+
+function FundsandAidSupplies() {
+ const navigate = useNavigate();
+ return (
+ <>
+
+
+
+
+
+
+
+ Support Disaster Relief Efforts Now!
+
+
+ "Your generosity can be the lifeline for those facing the
+ aftermath of disasters. Together, let's make a difference by
+ extending a helping hand to those in need. Every donation, no
+ matter how small, brings hope and relief to communities in
+ crisis. Join us in making a meaningful impact today."
+
+
+ {/*
{
+ navigate("/donate");
+ }}
+ >
+ {" "}
+ Donate Now
+ */}
+
+
+
+
+ How you can help?
+
+
+
+
+
+
+
+
Donate Funds:
+
+ Your donations will be used to address the most critical needs.
+ Your generosity will have a positive impact donations will have
+ on the lives of those affected. Your donations will be used to:
+
+
+ Providing food, water, and shelter to displaced families.
+
+
+ Delivering medical supplies and supporting healthcare
+ services.
+
+
+ Aiding in search and rescue efforts. Assisting with
+ long-term recovery and rebuilding efforts.
+
+
+
+
+
+
+
+
+
+
+
+
+
Donate Supplies:
+
+ Because of your generosity, this family won't have to go hungry
+ or sleep in the cold. Donate essential supplies today. Help
+ bring comfort and security to families affected by disaster.
+ Donate blankets and non-perishable food now.
+
+ Non-perishable
+ Hygiene products
+ Food
+ Blankets
+ First-Aid kits
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default FundsandAidSupplies;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
new file mode 100644
index 00000000..b8fa53eb
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
@@ -0,0 +1,241 @@
+import Navbar from "./Navbar";
+import "./App.css";
+import Footer from "./Footer";
+import DefaultNavbar from "./DefaultNavbar";
+import { useNavigate } from "react-router-dom";
+function Home() {
+ const navigate = useNavigate();
+ return (
+ <>
+
+
+
+
+
+
+
DARE
+
+
+ Building stronger communities, one disaster at a time.
+
+
+
+ Connecting those in need with the help they deserve
+
+
+
+
+
+
+ What is DARE?
+
+
+
+
+
+ Oh no, the weather reports are saying a Category 5 hurricane is
+ heading straight for us! What are we going to do?!
+
+
+
+
+ Don't worry, DARE is here to help! We've been monitoring the
+ situation closely and have evacuation plans in place. We'll help
+ you.
+
+
+
+
+ I just felt the ground shaking! Was that an earthquake? I'm so
+ scared!
+
+
+
+
+ DARE is trained to handle these situations. Take cover under a
+ sturdy table or desk and hold on until the shaking stops.
+
+
+
+
+ I see smoke rising in the distance! There must be a wildfire
+ nearby! Are we in danger?
+
+
+
+
+ DARE is already assessing the situation and coordinating with
+ firefighters. We'll send out alerts if evacuations are necessary.
+
+
+
+
+ The blizzard is getting worse! The roads are already impassable,
+ and we're running low on supplies!
+
+
+
+
+ DARE is aware of the blizzard conditions. We're working on
+ clearing roads and getting essential supplies to affected areas.
+
+
+
+
+
+ About DARE
+
+
+
+
+ DARE, a disaster awareness and rescue engine, is your one-stop
+ platform for everything disaster-related: preparedness, real-time
+ emergency response, and vital rescue coordination. Empower yourself
+ and your community with the knowledge and tools to navigate any
+ disaster. Don't be caught off guard โ with DARE, you'll have access
+ to expert-curated resources, 24/7 support, and a direct line to
+ emergency services during critical moments. Whether you're facing a
+ powerful hurricane, a devastating earthquake, or a sudden flood,
+ DARE provides peace of mind knowing help is just a click away. Build
+ a comprehensive survival plan, receive real-time updates on
+ unfolding events, and connect with rescue teams seamlessly โ all
+ through DARE's user-friendly interface.
+
+
+
+
+ DARE Features
+
+
+
+
+
+ Learn about potential hazards in your area and access essential
+ survival skills.
+
+
+
+
+ Connect with volunteers and first responders during emergencies.
+
+
+
+
+ Enable faster and more coordinated rescue efforts. Save lives in
+ critical moments.
+
+
+
+
+ {/*
+
+ Join DARE!
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand
+ during disasters. Join our network of caring individuals who
+ make a difference in times of crisis. We connect People Who Want
+ to Help.
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're
+ not alone!
+
+
+
+ */}
+
+
+ Join DARE!
+
+
+
+
+
+
+
+ Become a hero! Sign up as a volunteer to lend a helping hand during
+ disasters.
+
+
+ Join our network of caring individuals who make a difference in
+ times of crisis. We connect People Who Want to Help.
+
+ {/*
navigate("/v")}
+ className="btn btn-outline btn-primary w-full"
+ >
+ Sign Up
+ */}
+
+
+
+
+ Use DARE!
+
+
+
+
+
+
+
+ Get Help Now!
+
+
+ Connecting survivors with the help they need quickly. You're not
+ alone!
+
+
navigate("/safety")}
+ className="btn btn-outline btn-primary w-full"
+ >
+ Get Help
+
+
+
+
+
+ >
+ );
+}
+
+export default Home;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
new file mode 100644
index 00000000..f2ca25c8
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
@@ -0,0 +1,273 @@
+// import { useState } from "react";
+// import { Link, useNavigate } from "react-router-dom";
+// import axios from "axios";
+// import "./App.css";
+
+// const LoginForm = () => {
+// const navigate = useNavigate();
+// const [email, setEmail] = useState("");
+// const [password, setPassword] = useState("");
+// const [error, setError] = useState("");
+
+// const handleLogin = async (e) => {
+// e.preventDefault();
+
+// // Email validation regex
+// const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+
+// if (!emailRegex.test(email)) {
+// setError("Please enter a valid email address.");
+// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+// return;
+// }
+
+// try {
+// const response = await axios.post("http://localhost:8081/login", {
+// email,
+// password,
+// });
+// if (response.data.message === "Login successful") {
+// navigate("/home");
+// } else {
+// setError(response.data.error);
+// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+// }
+// } catch (error) {
+// console.error("Login error:", error);
+// setError("An error occurred while logging in");
+// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+// }
+// };
+
+// return (
+// <>
+//
+// >
+// );
+// };
+
+// export default LoginForm;
+import { useState } from "react";
+import { Link, useNavigate } from "react-router-dom";
+import axios from "axios";
+
+const LoginForm = () => {
+ const navigate = useNavigate();
+ const [email, setEmail] = useState("");
+ const [password, setPassword] = useState("");
+ const [error, setError] = useState("");
+
+ const handleLogin = async (e) => {
+ e.preventDefault();
+
+ // Email validation regex
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+
+ if (!emailRegex.test(email)) {
+ setError("Please enter a valid email address.");
+ setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+ return;
+ }
+
+ try {
+ const response = await axios.post("http://localhost:8081/login", {
+ email,
+ password,
+ });
+ if (response.data.message === "Login successful") {
+ navigate("/home");
+ } else {
+ setError(response.data.error);
+ setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+ }
+ } catch (error) {
+ console.error("Login error:", error);
+ setError("An error occurred while logging in");
+ setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
+ }
+ };
+
+ return (
+ //
+ //
+ //
+ //
Login now!
+ //
+ // Login and use DARE - your one-step platform for help during
+ // disasters!
+ //
+ //
+ //
+ //
+ //
+
+
+
+
Login now!
+
+ Login and use DARE - your one-step platform for help during
+ disasters!
+
+
+
+
+
+ );
+};
+
+export default LoginForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
new file mode 100644
index 00000000..ac931cb7
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
@@ -0,0 +1,319 @@
+// import { useNavigate } from "react-router-dom";
+// import "./App.css";
+// import "./index.css";
+// export default function Navbar() {
+// const navigate = useNavigate();
+// const handleLogout = () => {
+// // Perform logout logic here
+// navigate("/login"); // Route to /adminlogin after logout
+// };
+// return (
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// );
+// }
+import { useNavigate } from "react-router-dom";
+import "./App.css";
+import "./index.css";
+import { useEffect, useState } from "react";
+
+export default function Navbar() {
+ const navigate = useNavigate();
+ const [loginCount, setLoginCount] = useState(0);
+
+ useEffect(() => {
+ fetchLoginData();
+ });
+ // const fetchIdLogin = async () => {
+ // try {
+ // const response = await fetch("http://localhost:8081/login/:idlogin");
+ // const data = await response.json();
+ // const idlogin = data.idlogin;
+ // setIdLogin(idlogin);
+ // } catch (error) {
+ // console.error("Error fetching current user ID:", error);
+ // }
+ // fetchLoginCount(idlogin);
+ // };
+
+ const fetchLoginData = async () => {
+ try {
+ // Make a GET request to the endpoint with the dynamic idlogin
+ const response = await fetch(`http://localhost:8081/login/2`);
+
+ // Check if the response is successful (status 200)
+ if (response.ok) {
+ // Parse the response body as JSON
+ const data = await response.json();
+ // Access the loginCount and idlogin from the data object
+ const { loginCount, idlogin } = data;
+ setLoginCount(data.loginCount);
+ // Handle the data as needed, for example, log it to the console
+ console.log("Login Count:", loginCount);
+ console.log("ID Login:", idlogin);
+ } else {
+ // If response is not successful, throw an error
+ throw new Error("Failed to fetch data");
+ }
+ } catch (error) {
+ // Handle any errors that occur during the fetch operation
+ console.error("Error fetching login data:", error);
+ }
+ };
+
+ // Example usage: Fetch login data for idlogin 1
+ fetchLoginData(1);
+
+ const handleLogout = () => {
+ // Perform logout logic here
+ navigate("/"); // Route to /login after logout
+ };
+
+ return (
+
+
+
+
+ {/*
+
+
+
+
*/}
+ {/*
+
*/}
+ {/*
*/}
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
new file mode 100644
index 00000000..4149abef
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
@@ -0,0 +1,609 @@
+// import Footer from "./Footer";
+// import Navbar from "./Navbar";
+// function SafetyInstructions() {
+// return (
+// <>
+//
+//
+//
+//
+//
Get Help now!
+//
+// Tell us your current location and we will reach out to you!
+//
+//
+//
+//
+//
+//
+//
+// Earthquake Safety Instructions:
+//
+//
+// Drop, Cover, and Hold On: Drop to the ground, take cover under a
+// sturdy piece of furniture, and hold on until the shaking stops.
+//
+//
+// Stay Indoors: If indoors, stay there until the shaking stops and
+// it's safe to exit. Avoid doorways, windows, and elevators.
+//
+//
+// If Outdoors: Move to an open area away from buildings, trees,
+// streetlights, and utility wires.
+//
+//
+// Be Prepared: Have an earthquake kit ready with essentials such as
+// water, food, flashlight, first aid supplies, and important
+// documents.
+//
+//
+//
+
+//
+// Hurricane Safety Instructions:
+//
+//
+// Evacuation Plan: Follow evacuation orders if issued. Know your
+// evacuation route and have a plan in place.
+//
+//
+// Secure Property: Board up windows, secure outdoor objects, and
+// move vehicles to higher ground if possible.
+//
+//
+// Stay Informed: Keep track of weather updates and heed warnings
+// from local authorities.
+//
+//
+// Stock Supplies: Have a hurricane kit with water, non-perishable
+// food, medications, flashlights, batteries, and important
+// documents.
+//
+//
+//
+
+//
+// Flood Safety Instructions:
+//
+//
+// Evacuate if Necessary: Move to higher ground if flooding is
+// imminent. Never drive through flooded areas.
+//
+//
+// Turn Off Utilities: Shut off electricity and gas to prevent
+// accidents.
+//
+//
+// Avoid Contact with Floodwater: It may be contaminated or carry
+// debris.
+//
+//
+// Listen to Authorities: Follow instructions from emergency services
+// and evacuate when advised.
+//
+//
+//
+
+//
+// Wildfire Safety Instructions:
+//
+//
+// Create Defensible Space: Clear brush and vegetation around your
+// property to reduce the risk of fire spreading.
+//
+//
+// Prepare Your Home: Use fire-resistant materials for roofing and
+// siding. Keep gutters and roofs clear of debris.
+//
+//
+// Evacuation Plan: Have a plan in place and be ready to evacuate if
+// necessary. Keep important documents and valuables ready to go.
+//
+//
+// Monitor Alerts: Stay informed about wildfire alerts and evacuation
+// orders. Listen to local authorities and be prepared to act
+// quickly.
+//
+//
+//
+//
+
+//
+// >
+// );
+// }
+
+// export default SafetyInstructions;
+import { useState, useEffect } from "react";
+import Footer from "./Footer";
+import Navbar from "./Navbar";
+
+function SafetyInstructions() {
+ const [selectedDisaster, setSelectedDisaster] = useState("");
+ const [safetyInstructions, setSafetyInstructions] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [searchTerm, setSearchTerm] = useState("");
+
+ useEffect(() => {
+ fetchData();
+ }, []);
+
+ const handleSearch = (event) => {
+ setSearchTerm(event.target.value);
+ };
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/safety_instructions"
+ );
+ const data = await response.json();
+ setSafetyInstructions(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const [instructions, setInstructions] = useState([]);
+ const [emergencyContacts, setEmergencyContacts] = useState([]);
+ const [newContact, setNewContact] = useState({
+ Name: "",
+ Contact: "",
+ disaster_type: "",
+ current_location: "",
+ isCurrentVictim: false,
+ });
+
+ useEffect(() => {
+ if (selectedDisaster) {
+ fetchSafetyInstructions(selectedDisaster);
+ }
+ }, [selectedDisaster]);
+
+ const fetchSafetyInstructions = async (disasterType) => {
+ try {
+ const response = await fetch(`/api/safety_instructions/${disasterType}`);
+ if (response.ok) {
+ const data = await response.json();
+ setInstructions(data);
+ } else {
+ console.error(
+ "Failed to fetch safety instructions:",
+ response.statusText
+ );
+ }
+ } catch (error) {
+ console.error("Error fetching safety instructions:", error);
+ }
+ };
+
+ useEffect(() => {
+ fetchDatas();
+ }, []);
+
+ const fetchDatas = async () => {
+ try {
+ const response = await fetch(
+ "http://localhost:8081/api/emergency_help_request_victim_records"
+ );
+ const data = await response.json();
+ setEmergencyContacts(data);
+ } catch (error) {
+ console.error("Error fetching data:", error);
+ }
+ };
+
+ const handleSelectChange = (event) => {
+ setSelectedDisaster(event.target.value);
+ };
+ const handleAdd = async () => {
+ try {
+ console.log("Sending new contact:", newContact); // Log the data being sent
+ const response = await fetch(
+ "http://localhost:8081/api/emergency_help_request_victim_records",
+ {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(newContact),
+ }
+ );
+
+ if (!response.ok) {
+ throw new Error("Failed to add contact");
+ }
+
+ console.log("Contact added successfully");
+ setNewContact({
+ Name: "",
+ Contact: "",
+ disaster_type: "",
+ current_location: "",
+ isCurrentVictim: false,
+ });
+ fetchData();
+ } catch (error) {
+ console.error("Error adding contact:", error);
+ }
+ };
+
+ return (
+ <>
+
+
+
+
+
+ Get Help now!
+
+
+ Tell us your current location and we will reach out to you!
+
+
+
+
{
+ e.preventDefault();
+ handleAdd();
+ }}
+ >
+
+
+ Name:
+
+
+ setNewContact((prev) => ({
+ ...prev,
+ Name: e.target.value,
+ }))
+ }
+ />
+
+
+
+ Contact:
+
+
+ setNewContact((prev) => ({
+ ...prev,
+ Contact: e.target.value,
+ }))
+ }
+ />
+
+
+
+ Disaster Type:
+
+
+ setNewContact((prev) => ({
+ ...prev,
+ disaster_type: e.target.value,
+ }))
+ }
+ />
+
+
+
+ Current Location:
+
+
+ setNewContact((prev) => ({
+ ...prev,
+ current_location: e.target.value,
+ }))
+ }
+ />
+
+ {/*
+
+ Are you a Victim?
+
+
+ setNewContact((prev) => ({
+ ...prev,
+ isCurrentVictim: e.target.checked,
+ }))
+ }
+ />
+
*/}
+
+ {/* Open the modal using document.getElementById('ID').showModal() method */}
+
+ document.getElementById("my_modal_1").showModal()
+ }
+ >
+ Submit
+
+
+
+
+
Hello!
+
+ Your request has been received! Go through safety Instructions
+ below and stay safe.
+
+
+
+ {/* if there is a button in form, it will close the modal */}
+ Close
+
+
+
+
+
+
+
+ {/*
+
+
+ Disaster Type:
+
+
+
+
+ Select a disaster type
+
+
+ Earthquake
+
+
+ Hurricane
+
+
+ Flood
+
+
+ Wildfire
+
+
+
+
+ {selectedDisaster === "earthquake" && (
+
+ Earthquake Safety Instructions:
+
+
+ Drop, Cover, and Hold On: Drop to the ground, take cover under a
+ sturdy piece of furniture, and hold on until the shaking stops.
+
+
+ Stay Indoors: If indoors, stay there until the shaking stops and
+ it's safe to exit. Avoid doorways, windows, and elevators.
+
+
+ If Outdoors: Move to an open area away from buildings, trees,
+ streetlights, and utility wires.
+
+
+ Be Prepared: Have an earthquake kit ready with essentials such
+ as water, food, flashlight, first aid supplies, and important
+ documents.
+
+
+
+ )}
+
+ {selectedDisaster === "hurricane" && (
+
+ Hurricane Safety Instructions:
+
+
+ Evacuation Plan: Follow evacuation orders if issued. Know your
+ evacuation route and have a plan in place.
+
+
+ Secure Property: Board up windows, secure outdoor objects, and
+ move vehicles to higher ground if possible.
+
+
+ Stay Informed: Keep track of weather updates and heed warnings
+ from local authorities.
+
+
+ Stock Supplies: Have a hurricane kit with water, non-perishable
+ food, medications, flashlights, batteries, and important
+ documents.
+
+
+
+ )}
+
+ {selectedDisaster === "flood" && (
+
+ Flood Safety Instructions:
+
+
+ Evacuate if Necessary: Move to higher ground if flooding is
+ imminent. Never drive through flooded areas.
+
+
+ Turn Off Utilities: Shut off electricity and gas to prevent
+ accidents.
+
+
+ Avoid Contact with Floodwater: It may be contaminated or carry
+ debris.
+
+
+ Listen to Authorities: Follow instructions from emergency
+ services and evacuate when advised.
+
+
+
+ )}
+
+ {selectedDisaster === "wildfire" && (
+
+ Wildfire Safety Instructions:
+
+
+ Create Defensible Space: Clear brush and vegetation around your
+ property to reduce the risk of fire spreading.
+
+
+ Prepare Your Home: Use fire-resistant materials for roofing and
+ siding. Keep gutters and roofs clear of debris.
+
+
+ Evacuation Plan: Have a plan in place and be ready to evacuate
+ if necessary. Keep important documents and valuables ready to
+ go.
+
+
+ Monitor Alerts: Stay informed about wildfire alerts and
+ evacuation orders. Listen to local authorities and be prepared
+ to act quickly.
+
+
+
+ )}
+ */}
+
+
+
+ Safety Instructions
+
+
+
+
+ {/*
+
+
+ Safety Instructions
+
+
+
+ {safetyInstructions
+ .filter((instruction) =>
+ instruction.safety_instructions
+ .toLowerCase()
+ .includes(searchTerm.toLowerCase())
+ )
+ .map((instruction, index) => (
+
+ {instruction.safety_instructions}
+
+ ))}
+
+
*/}
+
+
+
+
+ Safety Instructions
+
+
+
+
+ {safetyInstructions
+ .filter((instruction) =>
+ instruction.safety_instructions
+ .toLowerCase()
+ .includes(searchTerm.toLowerCase())
+ )
+ .map((instruction, index) => (
+
+
+
+ {instruction.safety_instructions}
+
+
+
+ ))}
+
+
+
+
+ >
+ );
+}
+
+export default SafetyInstructions;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
new file mode 100644
index 00000000..252b35e4
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
@@ -0,0 +1,122 @@
+import { useEffect, useState } from "react";
+import Footer from "./Footer";
+import Navbar from "./Navbar";
+
+function SheltersandRescueTeams() {
+ const [shelterData, setShelterData] = useState([]);
+ const [totalItem, setTotalItem] = useState(0);
+ const [rescueData, setRescueData] = useState([]);
+ const [totalItems, setTotalItems] = useState(0);
+ const [currentLocation, setCurrentLocation] = useState("");
+
+ useEffect(() => {
+ fetchData();
+ fetchRescueData();
+ }, []);
+
+ const fetchData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/shelter");
+ const data = await response.json();
+ setShelterData(data);
+ setTotalItems(data.length);
+ } catch (error) {
+ console.error("Error fetching shelter data:", error);
+ }
+ };
+
+ const fetchRescueData = async () => {
+ try {
+ const response = await fetch("http://localhost:8081/api/rescue_team");
+ const data = await response.json();
+ setRescueData(data);
+ setTotalItem(data.length);
+ } catch (error) {
+ console.error("Error fetching rescue team data:", error);
+ }
+ };
+
+ const handleLocationChange = (e) => {
+ setCurrentLocation(e.target.value);
+ };
+
+ const filteredShelterData = shelterData.filter((shelter) =>
+ shelter.location.toLowerCase().includes(currentLocation.toLowerCase())
+ );
+
+ const filteredRescueData = rescueData.filter((rescue) =>
+ rescue.location.toLowerCase().includes(currentLocation.toLowerCase())
+ );
+
+ return (
+ <>
+
+
+
+ Shelters Near You
+
+
+
+
+
+ ID
+ Location
+ Capacity
+ AID
+
+
+
+ {filteredShelterData.map((shelter) => (
+
+ {shelter.sid}
+ {shelter.location}
+ {shelter.capacity}
+ {shelter.aid}
+
+ ))}
+
+
+
+
+
+ Rescue Teams
+
+
+
+
+
+ ID
+ Location
+
+
+
+ {filteredRescueData.map((rescue) => (
+
+ {rescue.rid}
+ {rescue.location}
+
+ ))}
+
+
+
+
+ >
+ );
+}
+
+export default SheltersandRescueTeams;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
new file mode 100644
index 00000000..92d5a078
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
@@ -0,0 +1,253 @@
+import { useState } from "react";
+import { Link, useNavigate } from "react-router-dom";
+import axios from "axios";
+import "./App.css";
+
+const SignupForm = () => {
+ const navigate = useNavigate();
+ const [formData, setFormData] = useState({
+ name: "",
+ email: "",
+ password: "",
+ });
+
+ const [error, setError] = useState("");
+
+ const { name, email, password } = formData;
+
+ const handleChange = (event) => {
+ const { name, value } = event.target;
+ setFormData({ ...formData, [name]: value });
+ };
+ const handleSignup = async (e) => {
+ e.preventDefault();
+
+ // Input validation
+ if (!name.trim() || !email.trim() || !password.trim()) {
+ setError("Please fill in all fields");
+ return;
+ }
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+ if (!emailRegex.test(email)) {
+ setError("Please enter a valid email address");
+ return;
+ }
+
+ if (password.length < 8) {
+ setError("Password must be at least 8 characters long");
+ return;
+ }
+
+ try {
+ const response = await axios.post(
+ "http://localhost:8081/signup",
+ {
+ name: name,
+ email: email,
+ password: password,
+ },
+ { withCredentials: true }
+ );
+
+ if (response.data.error) {
+ // Set specific error message based on backend response
+ switch (response.data.error) {
+ case "Please provide all required fields":
+ setError(
+ "Missing required fields. Please fill out the form completely."
+ );
+ break;
+ case "Please enter a valid 10-digit contact number":
+ setError(
+ "Invalid phone number. Please enter a valid 10-digit number."
+ );
+ break;
+ case "Please enter a valid email address":
+ setError(
+ "Invalid email address. Please enter a valid email format."
+ );
+ break;
+ case "Password must be at least 8 characters long":
+ setError(
+ "Password is too short. Please enter at least 8 characters."
+ );
+ break;
+ default:
+ setError(
+ "An error occurred during signup. Please try again later."
+ );
+ }
+ } else {
+ navigate("/"); // Redirect to dashboard on successful signup
+ }
+ } catch (error) {
+ console.error("Signup error:", error);
+ // Enhanced error logging
+ if (error.response) {
+ // The request was made and the server responded with a status code
+ // that falls out of the range of 2xx
+ console.error(
+ "Server responded with status code:",
+ error.response.status
+ );
+ console.error("Response data:", error.response.data);
+ } else if (error.request) {
+ // The request was made but no response was received
+ console.error("No response received:", error.request);
+ } else {
+ // Something happened in setting up the request that triggered an Error
+ console.error("Error", error.message);
+ }
+ console.error("Config:", error.config);
+
+ setError("An error occurred while signing up. Please try again later.");
+ }
+ };
+ return (
+ <>
+ {/*
+
+
+
Sign up now!
+
+ Sign up and join DARE - your one-step platform for help during
+ disasters!
+
+
+
+
+
+
+ Name
+
+
+
+
+
+ Email
+
+
+
+
+
+ Password
+
+
+
+
+ Signup
+
+
+
+ {error &&
{error}
}
+
+ Already have an account?
+
+ Login
+
+
+
+
+
*/}
+
+
+
+
Sign up now!
+
+ Sign up and join DARE - your one-stop platform for help during
+ disasters!
+
+
+
+
+
+ >
+ );
+};
+
+export default SignupForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
new file mode 100644
index 00000000..7d6c6f37
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
@@ -0,0 +1,41 @@
+import React, { useState } from "react";
+
+function VolunteerRegistrationForm() {
+ const [showForm, setShowForm] = useState(false);
+
+ const handleRegisterClick = () => {
+ setShowForm(true);
+ };
+
+ return (
+
+
Register as Volunteer
+ Register
+ {showForm && (
+
+ Name:
+
+
+ Contact:
+
+
+ Expertise:
+
+
+ Address:
+
+
+ Current Status:
+
+ Active
+ Inactive
+
+
+ Submit
+
+ )}
+
+ );
+}
+
+export default VolunteerRegistrationForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css b/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
new file mode 100644
index 00000000..4aa40750
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
@@ -0,0 +1,30 @@
+/* src/index.css or src/tailwind.css */
+@import "tailwindcss/base";
+@import "tailwindcss/components";
+@import "tailwindcss/utilities";
+
+@keyframes blink {
+ 0% {
+ opacity: 1;
+ }
+ 50% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes scroll-left {
+ 0% {
+ transform: translateX(100%);
+ }
+ 100% {
+ transform: translateX(-100%);
+ }
+}
+
+.animate-scroll {
+ animation: scroll-left 20s linear infinite;
+ white-space: nowrap;
+}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
new file mode 100644
index 00000000..54b39dd1
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
@@ -0,0 +1,10 @@
+import React from 'react'
+import ReactDOM from 'react-dom/client'
+import App from './App.jsx'
+import './index.css'
+
+ReactDOM.createRoot(document.getElementById('root')).render(
+
+
+ ,
+)
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
new file mode 100644
index 00000000..ae7ddbcb
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
@@ -0,0 +1,51 @@
+// tailwind.config.js
+import daisyui from "./node_modules/daisyui";
+
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
+ theme: {
+ extend: {
+ colors: {
+ "fantasy-primary": "#8A2BE2", // Purple
+ "fantasy-secondary": "#00FF00", // Lime
+ "fantasy-accent": "#FFD700", // Gold
+ "fantasy-neutral": "#D3D3D3", // Light Gray
+ },
+ keyframes: {
+ blink: {
+ "0%": { opacity: 1 },
+ "50%": { opacity: 0 },
+ "100%": { opacity: 1 },
+ },
+ },
+ animation: {
+ blink: "blink 1s infinite",
+ marquee: "marquee 20s linear infinite",
+ },
+ },
+ },
+ plugins: [daisyui],
+ daisyui: {
+ themes: [
+ {
+ mytheme: {
+ primary: "#8A2BE2", // Use actual color value
+ "primary-focus": "#00FF00", // Use actual color value
+ "primary-content": "#FFD700", // Use actual color value
+ secondary: "#00FF00", // Use actual color value
+ "secondary-focus": "#8A2BE2", // Use actual color value
+ "secondary-content": "#FFD700", // Use actual color value
+ accent: "#FFD700", // Use actual color value
+ "accent-focus": "#8A2BE2", // Use actual color value
+ "accent-content": "#00FF00", // Use actual color value
+ neutral: "#D3D3D3", // Use actual color value
+ "neutral-focus": "#8A2BE2", // Use actual color value
+ "neutral-content": "#FFD700", // Use actual color value
+
+ // Define other theme properties as needed
+ },
+ },
+ ],
+ },
+};
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
new file mode 100644
index 00000000..eb37550b
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
@@ -0,0 +1,8 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+import commonjs from "vite-plugin-commonjs"; // Add this line
+
+export default defineConfig({
+ plugins: [react(), commonjs()],
+ // ... other Vite configuration
+});
From 4dd711a22f0c61848cc9445f1997d8d9acb5aa12 Mon Sep 17 00:00:00 2001
From: shwetharbaliga
Date: Sat, 1 Nov 2025 00:00:17 +0530
Subject: [PATCH 3/5] Revert "add: mvp full stack project - DARE"
This reverts commit 9aa6543640d3b2fa1ab5d341521096ee91def21a.
---
.../MiniProjects/DARE/Backend/.gitignore | 5 -
.../DARE/Backend/package-lock.json | 1932 -----------------
.../MiniProjects/DARE/Backend/package.json | 27 -
.../MiniProjects/DARE/Backend/server.js | 1036 ---------
.../MiniProjects/DARE/Frontend/.eslintrc.cjs | 21 -
.../MiniProjects/DARE/Frontend/.gitignore | 24 -
.../DARE/Frontend/UserContext.jsx | 16 -
.../MiniProjects/DARE/Frontend/index.html | 13 -
.../DARE/Frontend/package-lock.json | 0
.../MiniProjects/DARE/Frontend/package.json | 38 -
.../DARE/Frontend/postcss.config.js | 6 -
.../DARE/Frontend/public/vite.svg | 1 -
.../DARE/Frontend/src/AdminAid.jsx | 264 ---
.../DARE/Frontend/src/AdminDisaster.jsx | 288 ---
.../DARE/Frontend/src/AdminEmergency.jsx | 908 --------
.../DARE/Frontend/src/AdminFooter.jsx | 64 -
.../DARE/Frontend/src/AdminFunds.jsx | 251 ---
.../DARE/Frontend/src/AdminLogin.jsx | 114 -
.../DARE/Frontend/src/AdminNavbar.jsx | 162 --
.../DARE/Frontend/src/AdminRescue.jsx | 245 ---
.../DARE/Frontend/src/AdminShelter.jsx | 259 ---
.../DARE/Frontend/src/AdminVolunteer.jsx | 7 -
.../DARE/Frontend/src/Adminhome.jsx | 234 --
.../DARE/Frontend/src/Adminsafety.jsx | 202 --
.../MiniProjects/DARE/Frontend/src/App.css | 9 -
.../MiniProjects/DARE/Frontend/src/App.jsx | 55 -
.../DARE/Frontend/src/DefaultHome.jsx | 417 ----
.../DARE/Frontend/src/DefaultNavbar.jsx | 491 -----
.../DARE/Frontend/src/DisasterTrack.jsx | 383 ----
.../DARE/Frontend/src/Donateform.jsx | 7 -
.../MiniProjects/DARE/Frontend/src/Footer.jsx | 143 --
.../DARE/Frontend/src/Funds&AidSupplies.jsx | 107 -
.../MiniProjects/DARE/Frontend/src/Home.jsx | 241 --
.../DARE/Frontend/src/LoginForm.jsx | 273 ---
.../MiniProjects/DARE/Frontend/src/Navbar.jsx | 319 ---
.../DARE/Frontend/src/SafetyInstructions.jsx | 609 ------
.../Frontend/src/Shelters&RescueTeams.jsx | 122 --
.../DARE/Frontend/src/SignupForm.jsx | 253 ---
.../Frontend/src/VolunteerRegistration.jsx | 41 -
.../MiniProjects/DARE/Frontend/src/index.css | 30 -
.../MiniProjects/DARE/Frontend/src/main.jsx | 10 -
.../DARE/Frontend/tailwind.config.js | 51 -
.../MiniProjects/DARE/Frontend/vite.config.js | 8 -
43 files changed, 9686 deletions(-)
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/package.json
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Backend/server.js
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/index.html
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/package.json
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore b/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
deleted file mode 100644
index 797ca4d1..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Backend/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-
-.env*
-.flaskenv*
-!.env.project
-!.env.vault
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json b/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
deleted file mode 100644
index 7dd16f5b..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Backend/package-lock.json
+++ /dev/null
@@ -1,1932 +0,0 @@
-{
- "name": "backend",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "backend",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "bcrypt": "^5.1.1",
- "body-parser": "^1.20.2",
- "cookie-parser": "^1.4.6",
- "cors": "^2.8.5",
- "dotenv": "^16.4.5",
- "env": "^0.0.2",
- "express": "^4.18.3",
- "express-session": "^1.18.0",
- "jsonwebtoken": "^9.0.2",
- "mysql": "^2.18.1",
- "mysql2": "^3.9.2",
- "nodemon": "^3.1.0"
- }
- },
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
- "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
- "dependencies": {
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.7",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
- },
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
- }
- },
- "node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
- },
- "node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
- "dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/agent-base/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
- },
- "node_modules/are-we-there-yet": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/bcrypt": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
- "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
- "hasInstallScript": true,
- "dependencies": {
- "@mapbox/node-pre-gyp": "^1.0.11",
- "node-addon-api": "^5.0.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/bignumber.js": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
- "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/body-parser": {
- "version": "1.20.2",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
- "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
- "dependencies": {
- "bytes": "3.1.2",
- "content-type": "~1.0.5",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "on-finished": "2.4.1",
- "qs": "6.11.0",
- "raw-body": "2.5.2",
- "type-is": "~1.6.18",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "bin": {
- "color-support": "bin.js"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
- "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
- "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-parser": {
- "version": "1.4.6",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
- "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
- "dependencies": {
- "cookie": "0.4.1",
- "cookie-signature": "1.0.6"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/cookie-parser/node_modules/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
- },
- "node_modules/cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
- },
- "node_modules/denque": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
- "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/destroy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
- "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
- "engines": {
- "node": ">= 0.8",
- "npm": "1.2.8000 || >= 1.4.16"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
- "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dotenv": {
- "version": "16.4.5",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
- "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/env": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/env/-/env-0.0.2.tgz",
- "integrity": "sha512-yP8LfjO4ughSHD/3HgLPinWzexmaOGvRfs2TFx0SZhOm7j1xPi9evjuGcLiNVHIGLmcsgMak4eDbBzlYqGIVxw==",
- "engines": {
- "node": ">= 0.5.9"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express": {
- "version": "4.18.3",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz",
- "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==",
- "dependencies": {
- "accepts": "~1.3.8",
- "array-flatten": "1.1.1",
- "body-parser": "1.20.2",
- "content-disposition": "0.5.4",
- "content-type": "~1.0.4",
- "cookie": "0.5.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "2.0.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.2.0",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.7",
- "qs": "6.11.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.2.1",
- "send": "0.18.0",
- "serve-static": "1.15.0",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express-session": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.0.tgz",
- "integrity": "sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==",
- "dependencies": {
- "cookie": "0.6.0",
- "cookie-signature": "1.0.7",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-headers": "~1.0.2",
- "parseurl": "~1.3.3",
- "safe-buffer": "5.2.1",
- "uid-safe": "~2.1.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express-session/node_modules/cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express-session/node_modules/cookie-signature": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
- "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
- "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/fs-minipass/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/generate-function": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
- "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
- "dependencies": {
- "is-property": "^1.0.2"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ignore-by-default": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
- "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-property": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
- },
- "node_modules/jsonwebtoken": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
- "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/jsonwebtoken/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
- },
- "node_modules/long": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
- "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
- },
- "node_modules/lru-cache": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
- "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
- "engines": {
- "node": ">=16.14"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minizlib/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
- },
- "node_modules/mysql": {
- "version": "2.18.1",
- "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
- "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
- "dependencies": {
- "bignumber.js": "9.0.0",
- "readable-stream": "2.3.7",
- "safe-buffer": "5.1.2",
- "sqlstring": "2.3.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mysql/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/mysql/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/mysql/node_modules/sqlstring": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
- "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mysql/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/mysql2": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.2.tgz",
- "integrity": "sha512-3Cwg/UuRkAv/wm6RhtPE5L7JlPB877vwSF6gfLAS68H+zhH+u5oa3AieqEd0D0/kC3W7qIhYbH419f7O9i/5nw==",
- "dependencies": {
- "denque": "^2.1.0",
- "generate-function": "^2.3.1",
- "iconv-lite": "^0.6.3",
- "long": "^5.2.1",
- "lru-cache": "^8.0.0",
- "named-placeholders": "^1.1.3",
- "seq-queue": "^0.0.5",
- "sqlstring": "^2.3.2"
- },
- "engines": {
- "node": ">= 8.0"
- }
- },
- "node_modules/mysql2/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/named-placeholders": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
- "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
- "dependencies": {
- "lru-cache": "^7.14.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/named-placeholders/node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/node-addon-api": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
- "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/nodemon": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
- "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
- "dependencies": {
- "chokidar": "^3.5.2",
- "debug": "^4",
- "ignore-by-default": "^1.0.1",
- "minimatch": "^3.1.2",
- "pstree.remy": "^1.1.8",
- "semver": "^7.5.3",
- "simple-update-notifier": "^2.0.0",
- "supports-color": "^5.5.0",
- "touch": "^3.1.0",
- "undefsafe": "^2.0.5"
- },
- "bin": {
- "nodemon": "bin/nodemon.js"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/nodemon"
- }
- },
- "node_modules/nodemon/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/nodemon/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
- "dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "dependencies": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
- "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/pstree.remy": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
- "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
- },
- "node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/random-bytes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
- "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/send": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
- "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/seq-queue": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
- "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
- },
- "node_modules/serve-static": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
- "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.18.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
- },
- "node_modules/side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
- },
- "node_modules/simple-update-notifier": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
- "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/sqlstring": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
- "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/touch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
- "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
- "dependencies": {
- "nopt": "~1.0.10"
- },
- "bin": {
- "nodetouch": "bin/nodetouch.js"
- }
- },
- "node_modules/touch/node_modules/nopt": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
- "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
- "dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/uid-safe": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
- "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
- "dependencies": {
- "random-bytes": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/undefsafe": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
- "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- }
- }
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/package.json b/Domains/FullStack/MiniProjects/DARE/Backend/package.json
deleted file mode 100644
index 9e3b9a80..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Backend/package.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name": "backend",
- "version": "1.0.0",
- "description": "",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "start": "nodemon server.js"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "dependencies": {
- "bcrypt": "^5.1.1",
- "body-parser": "^1.20.2",
- "cookie-parser": "^1.4.6",
- "cors": "^2.8.5",
- "dotenv": "^16.4.5",
- "env": "^0.0.2",
- "express": "^4.18.3",
- "express-session": "^1.18.0",
- "jsonwebtoken": "^9.0.2",
- "mysql": "^2.18.1",
- "mysql2": "^3.9.2",
- "nodemon": "^3.1.0"
- }
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Backend/server.js b/Domains/FullStack/MiniProjects/DARE/Backend/server.js
deleted file mode 100644
index cc66ef2a..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Backend/server.js
+++ /dev/null
@@ -1,1036 +0,0 @@
-const express = require("express");
-const mysql = require("mysql2/promise");
-const cors = require("cors");
-const bcrypt = require("bcrypt");
-const jwt = require("jsonwebtoken");
-require("dotenv").config();
-
-const app = express();
-
-app.use(
- cors({
- origin: "http://localhost:5173", // Adjust this to match your frontend's URL
- credentials: true,
- methods: ["GET", "POST", "DELETE", "PUT"],
- })
-);
-app.use(express.json());
-
-let connection;
-// Database connection setup
-async function connectToDatabase() {
- try {
- connection = await mysql.createConnection({
- host: process.env.DB_HOST,
- user: process.env.DB_USER,
- password: process.env.DB_PASSWORD,
- database: process.env.DB_NAME,
- });
- console.log("Database connected successfully");
- } catch (error) {
- console.error("Error connecting to database:", error);
- process.exit(1);
- }
-}
-app.get("/api/login", async (req, res) => {
- try {
- const [rows] = await connection.execute("SELECT name FROM login");
- res.json(rows);
- } catch (error) {
- console.error("Error fetching ", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.get("/api/admindisaster", async (req, res) => {
- try {
- const [rows] = await connection.execute(
- "SELECT d_id, type, date, severity, shel_id2, re_id, location FROM disaster_track"
- );
- res.json(rows);
- } catch (error) {
- console.error("Error fetching disaster track data:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.delete("/api/admindisaster/:d_id", async (req, res) => {
- try {
- const d_id = req.params.d_id;
- const [rows] = await connection.execute(
- "DELETE FROM disaster_track WHERE d_id = ?",
- [d_id]
- );
- res.json(rows);
- } catch (error) {
- console.error("Error deleting disaster track data:", error);
- // Log the error stack trace for more details
- console.error(error.stack);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-async function updateDisasterItemInDatabase(id, updatedItem) {
- try {
- // Assuming you have a connection object `connection`
- await connection.query(
- "UPDATE disaster_track SET type = ?, date = ?, severity = ?, shel_id2 = ?, re_id = ?, location = ? WHERE d_id = ?",
- [
- updatedItem.type,
- updatedItem.date,
- updatedItem.severity,
- updatedItem.shel_id2,
- updatedItem.re_id,
- updatedItem.location,
- id,
- ]
- );
- return { success: true };
- } catch (error) {
- console.error("Database update error:", error);
- return { success: false };
- }
-}
-
-app.put("/api/admindisaster/:id", async (req, res) => {
- const { id } = req.params; // Extract the ID from the URL parameters
- const updatedItem = req.body; // Extract the updated item data from the request body
-
- try {
- const result = await updateDisasterItemInDatabase(id, updatedItem);
- if (result.success) {
- res.status(200).json({ message: "Item updated successfully" });
- } else {
- res.status(500).json({ message: "Failed to update item" });
- }
- } catch (error) {
- console.error("Error updating item:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.post("/api/admindisaster", async (req, res) => {
- // Basic input validation
- if (
- !req.body.d_id ||
- !req.body.type ||
- !req.body.date ||
- !req.body.shel_id2 || // Adjusted field name
- !req.body.re_id || // Adjusted field name
- !req.body.location
- ) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newItem = {
- d_id: req.body.d_id,
- type: req.body.type,
- date: req.body.date,
- severity: req.body.severity, // Set to null if missing
- shel_id2: req.body.shel_id2, // Adjusted field name
- re_id: req.body.re_id, // Adjusted field name
- location: req.body.location,
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO disaster_track (d_id, type, date, severity, Shel_ID2, Re_ID, location) VALUES (?,?,?,?,?,?,?)",
- [
- newItem.d_id,
- newItem.type,
- newItem.date,
- newItem.severity,
- newItem.shel_id2, // Adjusted field name
- newItem.re_id, // Adjusted field name
- newItem.location,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.status(201).json({ message: "Item added successfully" });
- } else {
- res.status(500).json({ message: "Failed to add item" });
- }
- } catch (error) {
- console.error("Error adding item:", error);
- // Enhanced error handling
- if (error.code === "ER_DUP_ENTRY") {
- return res.status(409).json({ message: "Item already exists" });
- } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
- return res.status(500).json({ message: "Database access denied" });
- } else {
- return res.status(500).json({ message: "Internal Server Error" });
- }
- }
-});
-
-app.get("/api/safety_instructions", async (req, res) => {
- try {
- const [rows] = await connection.execute(
- "SELECT did, safety_instructions FROM safety_instructions"
- );
- res.json(rows);
- } catch (error) {
- console.error("Error fetching safety instructions:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.delete("/api/safety_instructions/:did", async (req, res) => {
- try {
- const did = req.params.did;
- const [rows] = await connection.execute(
- "DELETE FROM safety_instructions WHERE did = ?",
- [did]
- );
- res.json(rows);
- } catch (error) {
- console.error("Error deleting safety instruction:", error);
- console.error(error.stack); // Log the error stack trace for more details
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-async function updateSafetyInstructionInDatabase(id, updatedInstruction) {
- try {
- // Assuming you have a connection object `connection`
- await connection.query(
- "UPDATE safety_instructions SET safety_instructions = ? WHERE did = ?",
- [updatedInstruction, id]
- );
- return { success: true };
- } catch (error) {
- console.error("Database update error:", error);
- return { success: false };
- }
-}
-
-app.put("/api/safety_instructions/:id", async (req, res) => {
- const { id } = req.params; // Extract the ID from the URL parameters
- const updatedInstruction = req.body; // Extract the updated instruction from the request body
-
- try {
- const result = await updateSafetyInstructionInDatabase(
- id,
- updatedInstruction
- );
- if (result.success) {
- res.status(200).json({ message: "Instruction updated successfully" });
- } else {
- res.status(500).json({ message: "Failed to update instruction" });
- }
- } catch (error) {
- console.error("Error updating instruction:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.post("/api/emergency_help_request_victim_records", async (req, res) => {
- // Basic input validation
- if (
- // !req.body.E_ID ||
- !req.body.Name ||
- !req.body.Contact ||
- !req.body.disaster_type ||
- !req.body.current_location ||
- req.body.isCurrentVictim === undefined
- ) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newRecord = {
- E_ID: req.body.E_ID || null,
- Name: req.body.Name,
- Contact: req.body.Contact,
- disaster_type: req.body.disaster_type,
- current_location: req.body.current_location,
- isCurrentVictim: req.body.isCurrentVictim === "1" ? true : false, // Parse as boolean
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO emergency_help_request_victim_records (E_ID,Name, Contact, disaster_type, current_location, isCurrentVictim) VALUES (?,?, ?, ?, ?, ?)",
- [
- newRecord.E_ID,
- newRecord.Name,
- newRecord.Contact,
- newRecord.disaster_type,
- newRecord.current_location,
- newRecord.isCurrentVictim,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.status(201).json({
- message: "Emergency help request victim record added successfully",
- });
- } else {
- res.status(500).json({
- message: "Failed to add emergency help request victim record",
- });
- }
- } catch (error) {
- console.error("Error adding emergency help request victim record:", error);
- // Enhanced error handling
- if (error.code === "ER_DUP_ENTRY") {
- return res.status(409).json({
- message: "Emergency help request victim record already exists",
- });
- } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
- return res.status(500).json({ message: "Database access denied" });
- } else {
- return res.status(500).json({ message: "Internal Server Error" });
- }
- }
-});
-// app.post("/api/emergency_help_request_victim_records", async (req, res) => {
-// // Basic input validation
-// if (
-// !req.body.Name ||
-// !req.body.Contact ||
-// !req.body.disaster_type ||
-// !req.body.current_location ||
-// req.body.isCurrentVictim === undefined
-// ) {
-// return res.status(400).json({ message: "Missing required fields" });
-// }
-
-// const newRecord = {
-// Name: req.body.Name,
-// Contact: req.body.Contact,
-// disaster_type: req.body.disaster_type,
-// current_location: req.body.current_location,
-// isCurrentVictim: req.body.isCurrentVictim === "1" ? true : false, // Parse as boolean
-// };
-
-// try {
-// const [result] = await connection.execute(
-// "INSERT INTO emergency_help_request_victim_records (Name, Contact, disaster_type, current_location, isCurrentVictim) VALUES (?, ?, ?, ?, ?)",
-// [
-// newRecord.Name,
-// newRecord.Contact,
-// newRecord.disaster_type,
-// newRecord.current_location,
-// newRecord.isCurrentVictim,
-// ]
-// );
-
-// if (result.affectedRows > 0) {
-// res.status(201).json({
-// message: "Emergency help request victim record added successfully",
-// });
-// } else {
-// res.status(500).json({
-// message: "Failed to add emergency help request victim record",
-// });
-// }
-// } catch (error) {
-// console.error("Error adding emergency help request victim record:", error);
-// // Enhanced error handling
-// if (error.code === "ER_DUP_ENTRY") {
-// return res.status(409).json({
-// message: "Emergency help request victim record already exists",
-// });
-// } else if (error.code === "ER_ACCESS_DENIED_ERROR") {
-// return res.status(500).json({ message: "Database access denied" });
-// } else {
-// return res.status(500).json({ message: "Internal Server Error" });
-// }
-// }
-// });
-
-// GET /api/emergency_help_request_victim_records
-app.get("/api/emergency_help_request_victim_records", async (req, res) => {
- try {
- const [records] = await connection.execute(
- "SELECT * FROM emergency_help_request_victim_records"
- );
- res.json(records);
- } catch (error) {
- console.error(
- "Error fetching emergency help request victim records:",
- error
- );
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-// PUT /api/emergency_help_request_victim_records/:id
-app.put("/api/emergency_help_request_victim_records/:id", async (req, res) => {
- const id = req.params.id;
- const updatedRecord = req.body;
-
- try {
- const [result] = await connection.execute(
- "UPDATE emergency_help_request_victim_records SET Name = ?, Contact = ?, disaster_type = ?, current_location = ?, isCurrentVictim = ? WHERE E_ID = ?",
- [
- updatedRecord.Name,
- updatedRecord.Contact,
- updatedRecord.disaster_type,
- updatedRecord.current_location,
- updatedRecord.isCurrentVictim,
- id,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.json({
- message: "Emergency help request victim record updated successfully",
- });
- } else {
- res
- .status(404)
- .json({ message: "Emergency help request victim record not found" });
- }
- } catch (error) {
- console.error(
- "Error updating emergency help request victim record:",
- error
- );
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-// DELETE /api/emergency_help_request_victim_records/:id
-app.delete(
- "/api/emergency_help_request_victim_records/:id",
- async (req, res) => {
- const id = req.params.id;
-
- try {
- const [result] = await connection.execute(
- "DELETE FROM emergency_help_request_victim_records WHERE E_ID = ?",
- [id]
- );
-
- if (result.affectedRows > 0) {
- res.json({
- message: "Emergency help request victim record deleted successfully",
- });
- } else {
- res
- .status(404)
- .json({ message: "Emergency help request victim record not found" });
- }
- } catch (error) {
- console.error(
- "Error deleting emergency help request victim record:",
- error
- );
- res.status(500).json({ message: "Internal Server Error" });
- }
- }
-);
-app.post("/api/funds_allocated", async (req, res) => {
- // Basic input validation
- if (!req.body.fa_id || !req.body.A_ID || !req.body.amount || !req.body.S_ID) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newFund = {
- fa_id: req.body.fa_id, // Include fa_id
- A_ID: req.body.A_ID,
- amount: req.body.amount,
- S_ID: req.body.S_ID,
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO funds_allocated (fa_id, A_ID, amount, S_ID) VALUES (?, ?, ?, ?)", // Include fa_id in the query
- [newFund.fa_id, newFund.A_ID, newFund.amount, newFund.S_ID]
- );
-
- if (result.affectedRows > 0) {
- res.status(201).json({ message: "Fund record added successfully" });
- } else {
- res.status(500).json({ message: "Failed to add fund record" });
- }
- } catch (error) {
- console.error("Error adding fund record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.delete("/api/funds_allocated/:fa_id", async (req, res) => {
- const fa_id = req.params.fa_id;
-
- try {
- const [result] = await connection.execute(
- "DELETE FROM funds_allocated WHERE fa_id = ?",
- [fa_id]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Fund record deleted successfully" });
- } else {
- res.status(404).json({ message: "Fund record not found" });
- }
- } catch (error) {
- console.error("Error deleting fund record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.put("/api/funds_allocated/:fa_id", async (req, res) => {
- const fa_id = req.params.fa_id;
- const updatedFund = req.body;
-
- try {
- const [result] = await connection.execute(
- "UPDATE funds_allocated SET A_ID = ?, amount = ?, S_ID = ? WHERE fa_id = ?",
- [updatedFund.A_ID, updatedFund.amount, updatedFund.S_ID, fa_id]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Fund record updated successfully" });
- } else {
- res.status(404).json({ message: "Fund record not found" });
- }
- } catch (error) {
- console.error("Error updating fund record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-app.get("/api/funds_allocated", async (req, res) => {
- try {
- const [records] = await connection.execute("SELECT * FROM funds_allocated");
- res.json(records);
- } catch (error) {
- console.error("Error fetching fund records:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.post("/api/aid_supplies", async (req, res) => {
- // Basic input validation
- if (
- !req.body.aid ||
- !req.body.a_type ||
- !req.body.a_quantity ||
- !req.body.a_status ||
- !req.body.S_ID1
- ) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newAid = {
- aid: req.body.aid,
- a_type: req.body.a_type,
- a_quantity: req.body.a_quantity,
- a_status: req.body.a_status,
- S_ID1: req.body.S_ID1,
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO aid_supplies (aid, a_type, a_quantity, a_status, S_ID1) VALUES (?, ?, ?, ?, ?)",
- [
- newAid.aid,
- newAid.a_type,
- newAid.a_quantity,
- newAid.a_status,
- newAid.S_ID1,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.status(201).json({ message: "Aid record added successfully" });
- } else {
- res.status(500).json({ message: "Failed to add aid record" });
- }
- } catch (error) {
- console.error("Error adding aid record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.delete("/api/aid_supplies/:aid", async (req, res) => {
- const aid = req.params.aid;
-
- try {
- const [result] = await connection.execute(
- "DELETE FROM aid_supplies WHERE aid = ?",
- [aid]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Aid record deleted successfully" });
- } else {
- res.status(404).json({ message: "Aid record not found" });
- }
- } catch (error) {
- console.error("Error deleting aid record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.put("/api/aid_supplies/:aid", async (req, res) => {
- const aid = req.params.aid;
- const updatedAid = req.body;
-
- try {
- const [result] = await connection.execute(
- "UPDATE aid_supplies SET a_type = ?, a_quantity = ?, a_status = ?, S_ID1 = ? WHERE aid = ?",
- [
- updatedAid.a_type,
- updatedAid.a_quantity,
- updatedAid.a_status,
- updatedAid.S_ID1,
- aid,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Aid record updated successfully" });
- } else {
- res.status(404).json({ message: "Aid record not found" });
- }
- } catch (error) {
- console.error("Error updating aid record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.get("/api/aid_supplies", async (req, res) => {
- try {
- const [records] = await connection.execute("SELECT * FROM aid_supplies");
- res.json(records);
- } catch (error) {
- console.error("Error fetching aid records:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.post("/api/rescue_team", async (req, res) => {
- // Basic input validation
- if (!req.body.location || !req.body.disaster_id) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newTeam = {
- location: req.body.location,
- disaster_id: req.body.disaster_id,
- leader_id: req.body.leader_id || null, // Assuming leader_id can be nullable
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO rescue_team (location, disaster_id, leader_id) VALUES (?, ?, ?)",
- [newTeam.location, newTeam.disaster_id, newTeam.leader_id]
- );
-
- if (result.affectedRows > 0) {
- res
- .status(201)
- .json({ message: "Rescue team record added successfully" });
- } else {
- res.status(500).json({ message: "Failed to add rescue team record" });
- }
- } catch (error) {
- console.error("Error adding rescue team record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.delete("/api/rescue_team/:rid", async (req, res) => {
- const rid = req.params.rid;
-
- try {
- const [result] = await connection.execute(
- "DELETE FROM rescue_team WHERE rid = ?",
- [rid]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Rescue team record deleted successfully" });
- } else {
- res.status(404).json({ message: "Rescue team record not found" });
- }
- } catch (error) {
- console.error("Error deleting rescue team record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.put("/api/rescue_team/:rid", async (req, res) => {
- const rid = req.params.rid;
- const updatedTeam = req.body;
-
- try {
- const [result] = await connection.execute(
- "UPDATE rescue_team SET location = ?, disaster_id = ?, leader_id = ? WHERE rid = ?",
- [
- updatedTeam.location,
- updatedTeam.disaster_id,
- updatedTeam.leader_id,
- rid,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Rescue team record updated successfully" });
- } else {
- res.status(404).json({ message: "Rescue team record not found" });
- }
- } catch (error) {
- console.error("Error updating rescue team record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.get("/api/rescue_team", async (req, res) => {
- try {
- const [records] = await connection.execute("SELECT * FROM rescue_team");
- res.json(records);
- } catch (error) {
- console.error("Error fetching rescue team records:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.post("/api/shelter", async (req, res) => {
- // Basic input validation
- if (!req.body.location || !req.body.capacity || !req.body.aid) {
- return res.status(400).json({ message: "Missing required fields" });
- }
-
- const newShelter = {
- location: req.body.location,
- capacity: req.body.capacity,
- aid: req.body.aid,
- };
-
- try {
- const [result] = await connection.execute(
- "INSERT INTO shelter (location, capacity, aid) VALUES (?, ?, ?)",
- [newShelter.location, newShelter.capacity, newShelter.aid]
- );
-
- if (result.affectedRows > 0) {
- res.status(201).json({ message: "Shelter record added successfully" });
- } else {
- res.status(500).json({ message: "Failed to add shelter record" });
- }
- } catch (error) {
- console.error("Error adding shelter record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.delete("/api/shelter/:sid", async (req, res) => {
- const sid = req.params.sid;
-
- try {
- const [result] = await connection.execute(
- "DELETE FROM shelter WHERE sid = ?",
- [sid]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Shelter record deleted successfully" });
- } else {
- res.status(404).json({ message: "Shelter record not found" });
- }
- } catch (error) {
- console.error("Error deleting shelter record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.put("/api/shelter/:sid", async (req, res) => {
- const sid = req.params.sid;
- const updatedShelter = req.body;
-
- try {
- const [result] = await connection.execute(
- "UPDATE shelter SET location = ?, capacity = ?, aid = ? WHERE sid = ?",
- [
- updatedShelter.location,
- updatedShelter.capacity,
- updatedShelter.aid,
- sid,
- ]
- );
-
- if (result.affectedRows > 0) {
- res.json({ message: "Shelter record updated successfully" });
- } else {
- res.status(404).json({ message: "Shelter record not found" });
- }
- } catch (error) {
- console.error("Error updating shelter record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.get("/api/shelter", async (req, res) => {
- try {
- const [records] = await connection.execute("SELECT * FROM shelter");
- res.json(records);
- } catch (error) {
- console.error("Error fetching shelter records:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-async function startServer() {
- await connectToDatabase(); // Ensure the database is connected before starting the server
-
- // Server setup
- const port = process.env.PORT || 8081;
- app.listen(port, () => {
- console.log(`Server started on port ${port}`);
- });
-}
-
-// JWT Secret
-const JWT_SECRET = process.env.JWT_SECRET || "not_authorized";
-
-// Middleware to check if user is authenticated
-const isAuthenticated = (req, res, next) => {
- const token = req.headers.authorization;
- if (!token) {
- return res.status(401).json({ error: "Unauthorized" });
- }
-
- try {
- const decoded = jwt.verify(token, JWT_SECRET);
- req.user = decoded;
- next();
- } catch (error) {
- return res.status(401).json({ error: "Unauthorized" });
- }
-};
-
-// Signup route
-app.post("/signup", async (req, res) => {
- const { name, email, password } = req.body;
-
- // Input validation
- if (!name || !email || !password) {
- return res
- .status(400)
- .json({ error: "Please provide all required fields" });
- }
-
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
- if (!emailRegex.test(email)) {
- return res
- .status(400)
- .json({ error: "Please enter a valid email address" });
- }
-
- try {
- const hashedPassword = await bcrypt.hash(password, 10); // Hash password
-
- const [_, fields] = await connection.execute(
- "INSERT INTO login (name, email, password) VALUES (?, ?, ?)",
- [name, email, hashedPassword]
- );
-
- res.json({ message: "sign up successfully" });
- } catch (error) {
- console.error("Database error:", error);
- // Provide more detailed error messages
- if (error.code === "ER_ACCESS_DENIED_ERROR") {
- res.status(500).json({
- error:
- "Database access denied. Please check your database credentials.",
- });
- } else if (error.code === "ER_NO_SUCH_TABLE") {
- res.status(500).json({
- error: "Database table not found. Please check your database schema.",
- });
- } else if (error.code === "ER_DUP_ENTRY") {
- // Handle duplicate entry error
- res.status(400).json({
- error: "name already exists. Please choose a different name.",
- });
- } else {
- res.status(500).json({ error: "Internal server error" });
- }
- }
-});
-
-// app.post("/login", async (req, res) => {
-// const { email, password } = req.body;
-
-// try {
-// const [rows] = await connection.execute(
-// "SELECT email, password FROM login WHERE email = ?",
-// [email]
-// );
-// const userWithEmail = rows[0];
-
-// if (!userWithEmail) {
-// return res
-// .status(400)
-// .json({ message: "Email or Password does not match!!" });
-// }
-
-// // Compare the provided password with the hashed password from the database
-// const isPasswordValid = await bcrypt.compare(
-// password,
-// userWithEmail.password
-// );
-
-// if (!isPasswordValid) {
-// return res
-// .status(400)
-// .json({ message: "Email or Password does not match!!" });
-// }
-
-// // If the password is valid, generate a JWT token
-// const jwtToken = jwt.sign(
-// { id: userWithEmail.id, email: userWithEmail.email },
-// JWT_SECRET
-// );
-// // var idlogin = connection.query("SELECT idlogin FROM login WHERE email= ?", [
-// // userWithEmail.email,
-// // ]);
-
-// // connection.query("UPDATE login SET count=count+1 WHERE idlogin= '?' ", [
-// // idlogin,
-// // ]);
-// res.json({ message: "Login successful", token: jwtToken });
-// } catch (err) {
-// console.error("Error:", err);
-// res.status(500).json({ message: "Internal Server Error" });
-// }
-// });
-
-app.post("/login", async (req, res) => {
- const { email, password } = req.body;
-
- try {
- const [rows] = await connection.execute(
- "SELECT email, password FROM login WHERE email = ?",
- [email]
- );
- const userWithEmail = rows[0];
-
- if (!userWithEmail) {
- return res
- .status(400)
- .json({ message: "Email or Password does not match!!" });
- }
-
- // Compare the provided password with the hashed password from the database
- const isPasswordValid = await bcrypt.compare(
- password,
- userWithEmail.password
- );
-
- if (!isPasswordValid) {
- return res
- .status(400)
- .json({ message: "Email or Password does not match!!" });
- }
-
- // If the password is valid, generate a JWT token
- const jwtToken = jwt.sign(
- { id: userWithEmail.id, email: userWithEmail.email },
- JWT_SECRET
- );
-
- // Increment the login count for the user
- const [idloginResult] = await connection.query(
- "SELECT idlogin FROM login WHERE email = ?",
- [userWithEmail.email]
- );
- const idlogin = idloginResult[0].idlogin;
-
- await connection.query(
- "UPDATE login SET count = count + 1 WHERE idlogin = ?",
- [idlogin]
- );
-
- res.json({ message: "Login successful", token: jwtToken });
- } catch (err) {
- console.error("Error:", err);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-app.get("/login/:idlogin", async (req, res) => {
- const idlogin = req.params.idlogin;
- try {
- const [rows] = await connection.execute(
- "SELECT count FROM login WHERE idlogin = ?",
- [idlogin]
- );
- if (rows.length > 0) {
- res.json({ loginCount: rows[0].count, idlogin: idlogin });
- } else {
- res.status(404).json({ message: "User not found" });
- }
- } catch (error) {
- console.error("Error fetching login count:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-// app.get("/api/:id", isAuthenticated, async (req, res) => {
-// const { id } = req.params;
-// try {
-// const [rows] = await connection.execute(
-// "SELECT * FROM feedback WHERE F_House_No = ?",
-// [id]
-// );
-// const complaintDetails = rows[0];
-// if (!complaintDetails) {
-// return res
-// .status(404)
-// .json({ error: "No complaint details found for the given house ID" });
-// }
-// res.json(complaintDetails);
-// } catch (error) {
-// console.error("Database error:", error);
-// res.status(500).json({ error: "Internal server error" });
-// }
-// });
-// app.get("/login/:idlogin", (req, res) => {
-// const idlogin = req.user.idlogin; // Assuming idlogin is stored in the user object after authentication
-// if (idlogin) {
-// res.json({ idlogin });
-// } else {
-// res.status(401).json({ message: "User not authenticated" });
-// }
-// });
-
-app.post("/adminlogin", async (req, res) => {
- const { email, password } = req.body;
-
- try {
- const [rows] = await connection.execute(
- "SELECT email, password FROM admin WHERE email = ?",
- [email]
- );
- const userWithEmail = rows[0];
-
- if (!userWithEmail) {
- return res
- .status(400)
- .json({ message: "Email or Password does not match!!" });
- }
-
- // Compare the provided password with the hashed password from the database
- const isPasswordValid = await bcrypt.compare(
- password,
- userWithEmail.password
- );
-
- if (!isPasswordValid) {
- return res
- .status(400)
- .json({ message: "Email or Password does not match!!" });
- }
-
- // If the password is valid, generate a JWT token
- const jwtToken = jwt.sign(
- { id: userWithEmail.id, email: userWithEmail.email },
- JWT_SECRET
- );
-
- res.json({ message: "Login successful", token: jwtToken });
- } catch (err) {
- console.error("Error:", err);
- res.status(500).json({ message: "Internal Server Error" });
- }
-});
-
-startServer();
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs b/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
deleted file mode 100644
index 3e212e1d..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/.eslintrc.cjs
+++ /dev/null
@@ -1,21 +0,0 @@
-module.exports = {
- root: true,
- env: { browser: true, es2020: true },
- extends: [
- 'eslint:recommended',
- 'plugin:react/recommended',
- 'plugin:react/jsx-runtime',
- 'plugin:react-hooks/recommended',
- ],
- ignorePatterns: ['dist', '.eslintrc.cjs'],
- parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
- settings: { react: { version: '18.2' } },
- plugins: ['react-refresh'],
- rules: {
- 'react/jsx-no-target-blank': 'off',
- 'react-refresh/only-export-components': [
- 'warn',
- { allowConstantExport: true },
- ],
- },
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore b/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
deleted file mode 100644
index a547bf36..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-*.local
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
deleted file mode 100644
index d9dff28d..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/UserContext.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-// UserContext.js
-import React, { createContext, useContext, useState } from "react";
-
-const UserContext = createContext();
-
-export const UserProvider = ({ children }) => {
- const [user, setUser] = useState(null);
-
- return (
-
- {children}
-
- );
-};
-
-export const useUser = () => useContext(UserContext);
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/index.html b/Domains/FullStack/MiniProjects/DARE/Frontend/index.html
deleted file mode 100644
index 0c589ecc..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
- Vite + React
-
-
-
-
-
-
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json b/Domains/FullStack/MiniProjects/DARE/Frontend/package-lock.json
deleted file mode 100644
index e69de29b..00000000
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/package.json b/Domains/FullStack/MiniProjects/DARE/Frontend/package.json
deleted file mode 100644
index 08190de1..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "frontend",
- "private": true,
- "version": "0.0.0",
- "type": "module",
- "scripts": {
- "dev": "vite",
- "build": "vite build",
- "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
- "preview": "vite preview"
- },
- "dependencies": {
- "@coreui/icons": "^3.0.1",
- "@coreui/icons-react": "^2.2.1",
- "axios": "^1.6.7",
- "file-loader": "^6.2.0",
- "react": "^18.2.0",
- "react-daisyui": "^5.0.0",
- "react-dom": "^18.2.0",
- "react-router-dom": "^6.22.3",
- "react-scripts": "^5.0.1"
- },
- "devDependencies": {
- "@types/react": "^18.2.56",
- "@types/react-dom": "^18.2.19",
- "@vitejs/plugin-react": "^4.2.1",
- "autoprefixer": "^10.4.18",
- "daisyui": "^4.7.3",
- "eslint": "^8.56.0",
- "eslint-plugin-react": "^7.33.2",
- "eslint-plugin-react-hooks": "^4.6.0",
- "eslint-plugin-react-refresh": "^0.4.5",
- "postcss": "^8.4.35",
- "tailwindcss": "^3.4.1",
- "vite": "^5.1.4",
- "vite-plugin-commonjs": "^0.10.1"
- }
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
deleted file mode 100644
index 2aa7205d..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/postcss.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
- plugins: {
- tailwindcss: {},
- autoprefixer: {},
- },
-};
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg b/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
deleted file mode 100644
index e7b8dfb1..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/public/vite.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
deleted file mode 100644
index 7846e8ec..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminAid.jsx
+++ /dev/null
@@ -1,264 +0,0 @@
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminAid() {
- const [assetsData, setAssetsData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingAsset, setEditingAsset] = useState(null);
- const [newAsset, setNewAsset] = useState({
- aid: "",
- a_type: "",
- a_quantity: "",
- a_status: "",
- S_ID1: "",
- });
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/aid_supplies");
- const data = await response.json();
- setAssetsData(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteAsset = async (id) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/aid_supplies/${id}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete asset");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting asset:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/aid_supplies/${editingAsset.aid}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingAsset),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update asset");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating asset:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/aid_supplies", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newAsset),
- });
-
- if (!response.ok) {
- throw new Error("Failed to add asset");
- }
-
- console.log("Asset added successfully");
- setNewAsset({
- aid: "",
- a_type: "",
- a_quantity: "",
- a_status: "",
- S_ID1: "",
- });
- fetchData();
- } catch (error) {
- console.error("Error adding asset:", error);
- }
- };
-
- return (
- <>
-
-
- ASSETS DATABASE
-
- Total Assets: {totalItems}
- setShowAddForm(true)}>Add New Asset
-
-
-
-
- ID
- Type
- Quantity
- Status
- S_ID
- Actions
-
-
-
- {assetsData.map((asset) => (
-
- {asset.aid}
- {asset.a_type}
- {asset.a_quantity}
- {asset.a_status}
- {asset.S_ID1}
-
- deleteAsset(asset.aid)}
- >
- Delete
-
- {
- setShowEditForm(true);
- setEditingAsset(asset);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
Edit Asset
-
- setEditingAsset({ ...editingAsset, a_type: e.target.value })
- }
- />
-
- setEditingAsset({ ...editingAsset, a_quantity: e.target.value })
- }
- />
-
- setEditingAsset({ ...editingAsset, a_status: e.target.value })
- }
- />
-
- setEditingAsset({ ...editingAsset, S_ID1: e.target.value })
- }
- />
-
- Update
-
-
- )}
-
- {showAddForm && (
-
-
Add New Asset
- {
- e.preventDefault();
- handleAdd();
- }}
- >
-
- setNewAsset((prev) => ({
- ...prev,
- aid: e.target.value,
- }))
- }
- />
-
- setNewAsset((prev) => ({
- ...prev,
- a_type: e.target.value,
- }))
- }
- />
-
- setNewAsset((prev) => ({
- ...prev,
- a_quantity: e.target.value,
- }))
- }
- />
-
- setNewAsset((prev) => ({
- ...prev,
- a_status: e.target.value,
- }))
- }
- />
-
- setNewAsset((prev) => ({
- ...prev,
- S_ID1: e.target.value,
- }))
- }
- />
-
- Add
-
-
-
- )}
-
-
- >
- );
-}
-
-export default AdminAid;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
deleted file mode 100644
index 24683af2..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminDisaster.jsx
+++ /dev/null
@@ -1,288 +0,0 @@
-import { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminDisaster() {
- const [disasterData, setDisasterData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingItem, setEditingItem] = useState(null);
- const [newItem, setNewItem] = useState({
- d_id: "",
- type: "",
- date: "",
- severity: "",
- shel_id2: "",
- re_id: "",
- location: "",
- });
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/admindisaster");
- const data = await response.json();
- setDisasterData(data);
- setTotalItems(data.length); // Update the totalItems state
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
- const deleteItem = async (d_id) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/admindisaster/${d_id}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete item");
- }
- // Optionally, you can refresh the data after deletion
- fetchData();
- } catch (error) {
- console.error("Error deleting item:", error);
- }
- };
- const handleAdd = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/admindisaster", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newItem),
- });
-
- if (!response.ok) {
- throw new Error("Failed to add item");
- }
-
- // Assuming success if the response status is 201
- console.log("Item added successfully");
- // Clear the newItem state after successful addition
- setNewItem({
- d_id: "",
- type: "",
- date: "",
- severity: "",
- shel_id2: "",
- re_id: "",
- location: "",
- });
- // Refresh the data after adding
- fetchData();
- // Hide the add form after successful addition
- setShowAddForm(false);
- } catch (error) {
- console.error("Error adding item:", error);
- }
- };
-
- const handleUpdate = async (e) => {
- e.preventDefault();
- try {
- const response = await fetch(
- `http://localhost:8081/api/admindisaster/${editingItem.d_id}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingItem),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update item");
- }
- // Optionally, refresh the data after updating
- fetchData();
- // Hide the edit form after successful update
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating item:", error);
- }
- };
-
- return (
- <>
-
-
- DISASTER TRACK DATABASE
-
- Total Items: {totalItems}
{/* Display the total number of items */}
- setShowAddForm(true)}>Add New Item
-
-
- {/* head */}
-
-
- ID
- Type
- Date
- Severity
- Shelter ID
- Rescue Team ID
- Location
- Actions
-
-
-
- {disasterData.map((item, index) => (
-
- {index + 1}
- {item.type}
- {item.date}
- {item.severity}
- {item.shel_id}
- {item.re_id}
- {item.location}
-
- deleteItem(item.d_id)}>
- Delete
-
- {
- setShowEditForm(true);
- setEditingItem(item);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
- )}
- {showAddForm && (
-
-
{
- e.preventDefault(); // Prevent default form submission behavior
- handleAdd(newItem); // Call handleAdd function with newItem object
- }}
- >
-
- setNewItem((prev) => ({ ...prev, d_id: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, type: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, date: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, severity: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, shel_id2: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, re_id: e.target.value }))
- }
- />
-
- setNewItem((prev) => ({ ...prev, location: e.target.value }))
- }
- />
- Add
-
-
- )}
-
- >
- );
-}
-
-export default AdminDisaster;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
deleted file mode 100644
index 78fbfdbf..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminEmergency.jsx
+++ /dev/null
@@ -1,908 +0,0 @@
-// // import React, { useState, useEffect } from "react";
-// // import AdminFooter from "./AdminFooter";
-// // import AdminNavbar from "./AdminNavbar";
-
-// // function AdminEmergency() {
-// // const [emergencyContacts, setEmergencyContacts] = useState([]);
-// // const [totalItems, setTotalItems] = useState(0);
-// // const [showEditForm, setShowEditForm] = useState(false);
-// // const [showAddForm, setShowAddForm] = useState(false);
-// // const [editingContact, setEditingContact] = useState(null);
-// // const [newContact, setNewContact] = useState({
-// // E_ID: "",
-// // Name: "",
-// // Contact: "",
-// // disaster_type: "",
-// // current_location: "",
-// // isCurrentVictim: false,
-// // });
-
-// // useEffect(() => {
-// // fetchData();
-// // }, []);
-
-// // const fetchData = async () => {
-// // try {
-// // const response = await fetch(
-// // "http://localhost:8081/api/emergency_help_request_victim_records"
-// // );
-// // const data = await response.json();
-// // setEmergencyContacts(data);
-// // setTotalItems(data.length);
-// // } catch (error) {
-// // console.error("Error fetching data:", error);
-// // }
-// // };
-
-// // const deleteContact = async (id) => {
-// // try {
-// // const response = await fetch(
-// // `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
-// // {
-// // method: "DELETE",
-// // }
-// // );
-// // if (!response.ok) {
-// // throw new Error("Failed to delete contact");
-// // }
-// // fetchData();
-// // } catch (error) {
-// // console.error("Error deleting contact:", error);
-// // }
-// // };
-
-// // const handleUpdate = async () => {
-// // try {
-// // const response = await fetch(
-// // `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
-// // {
-// // method: "PUT",
-// // headers: {
-// // "Content-Type": "application/json",
-// // },
-// // body: JSON.stringify(editingContact),
-// // }
-// // );
-// // if (!response.ok) {
-// // throw new Error("Failed to update contact");
-// // }
-// // fetchData();
-// // setShowEditForm(false);
-// // } catch (error) {
-// // console.error("Error updating contact:", error);
-// // }
-// // };
-
-// // const handleAdd = async () => {
-// // try {
-// // const response = await fetch(
-// // "http://localhost:8081/api/emergency_help_request_victim_records",
-// // {
-// // method: "POST",
-// // headers: {
-// // "Content-Type": "application/json",
-// // },
-// // body: JSON.stringify(newContact),
-// // }
-// // );
-
-// // if (!response.ok) {
-// // throw new Error("Failed to add contact");
-// // }
-
-// // console.log("Contact added successfully");
-// // setNewContact({
-// // E_ID: "",
-// // Name: "",
-// // Contact: "",
-// // disaster_type: "",
-// // current_location: "",
-// // isCurrentVictim: false,
-// // });
-// // fetchData();
-// // } catch (error) {
-// // console.error("Error adding contact:", error);
-// // }
-// // };
-
-// // return (
-// // <>
-// //
-// //
-// // EMERGENCY CONTACTS DATABASE
-// //
-// // Total Contacts: {totalItems}
-// // setShowAddForm(true)}>Add New Contact
-// //
-// //
-// //
-// //
-// // ID
-// // Name
-// // Contact
-// // Disaster Type
-// // Current Location
-// // Is Current Victim
-// // Actions
-// //
-// //
-// //
-// // {emergencyContacts.map((contact) => (
-// //
-// // {contact.E_ID}
-// // {contact.Name}
-// // {contact.Contact}
-// // {contact.disaster_type}
-// // {contact.current_location}
-// // {contact.isCurrentVictim ? "Yes" : "No"}
-// //
-// // deleteContact(contact.E_ID)}
-// // >
-// // Delete
-// //
-// // {
-// // setShowEditForm(true);
-// // setEditingContact(contact);
-// // }}
-// // >
-// // Edit
-// //
-// //
-// //
-// // ))}
-// //
-// //
-// //
-// // {showEditForm && (
-// //
-// //
Edit Contact
-// //
-// // setEditingContact({ ...editingContact, Name: e.target.value })
-// // }
-// // />
-// //
-// // setEditingContact({ ...editingContact, Contact: e.target.value })
-// // }
-// // />
-// //
-// // setEditingContact({
-// // ...editingContact,
-// // disaster_type: e.target.value,
-// // })
-// // }
-// // />
-// //
-// // setEditingContact({
-// // ...editingContact,
-// // current_location: e.target.value,
-// // })
-// // }
-// // />
-// //
-// // Is Current Victim:
-// //
-// // setEditingContact({
-// // ...editingContact,
-// // isCurrentVictim: e.target.checked,
-// // })
-// // }
-// // />
-// //
-// //
-// // Update
-// //
-// //
-// // )}
-
-// // {showAddForm && (
-// //
-// //
Add New Contact
-// //
{
-// // e.preventDefault();
-// // handleAdd();
-// // }}
-// // >
-// // {/* Add input fields for new contact */}
-// //
-// // Add
-// //
-// //
-// // {showAddForm && (
-// //
-// //
Add New Contact
-// // {
-// // e.preventDefault();
-// // handleAdd();
-// // }}
-// // >
-// //
-// // setNewContact((prev) => ({
-// // ...prev,
-// // Name: e.target.value,
-// // }))
-// // }
-// // />
-// //
-// // setNewContact((prev) => ({
-// // ...prev,
-// // Contact: e.target.value,
-// // }))
-// // }
-// // />
-// //
-// // setNewContact((prev) => ({
-// // ...prev,
-// // disaster_type: e.target.value,
-// // }))
-// // }
-// // />
-// //
-// // setNewContact((prev) => ({
-// // ...prev,
-// // current_location: e.target.value,
-// // }))
-// // }
-// // />
-// //
-// // setNewContact((prev) => ({
-// // ...prev,
-// // isCurrentVictim: e.target.value === "true",
-// // }))
-// // }
-// // >
-// // Yes
-// // No
-// //
-// //
-// // Add
-// //
-// //
-// //
-// // )}
-// //
-// // )}
-// //
-// // >
-// // );
-// // }
-
-// // export default AdminEmergency;
-// import React, { useState, useEffect } from "react";
-// import AdminFooter from "./AdminFooter";
-// import AdminNavbar from "./AdminNavbar";
-
-// function AdminEmergency() {
-// const [emergencyContacts, setEmergencyContacts] = useState([]);
-// const [totalItems, setTotalItems] = useState(0);
-// const [showEditForm, setShowEditForm] = useState(false);
-// const [showAddForm, setShowAddForm] = useState(false);
-// const [editingContact, setEditingContact] = useState(null);
-// const [newContact, setNewContact] = useState({
-// E_ID: "",
-// Name: "",
-// Contact: "",
-// disaster_type: "",
-// current_location: "",
-// isCurrentVictim: false,
-// });
-
-// useEffect(() => {
-// fetchData();
-// }, []);
-
-// const fetchData = async () => {
-// try {
-// const response = await fetch(
-// "http://localhost:8081/api/emergency_help_request_victim_records"
-// );
-// const data = await response.json();
-// setEmergencyContacts(data);
-// setTotalItems(data.length);
-// } catch (error) {
-// console.error("Error fetching data:", error);
-// }
-// };
-
-// const deleteContact = async (id) => {
-// try {
-// const response = await fetch(
-// `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
-// {
-// method: "DELETE",
-// }
-// );
-// if (!response.ok) {
-// throw new Error("Failed to delete contact");
-// }
-// fetchData();
-// } catch (error) {
-// console.error("Error deleting contact:", error);
-// }
-// };
-
-// const handleUpdate = async () => {
-// try {
-// const response = await fetch(
-// `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
-// {
-// method: "PUT",
-// headers: {
-// "Content-Type": "application/json",
-// },
-// body: JSON.stringify(editingContact),
-// }
-// );
-// if (!response.ok) {
-// throw new Error("Failed to update contact");
-// }
-// fetchData();
-// setShowEditForm(false);
-// } catch (error) {
-// console.error("Error updating contact:", error);
-// }
-// };
-
-// const handleAdd = async () => {
-// try {
-// const response = await fetch(
-// "http://localhost:8081/api/emergency_help_request_victim_records",
-// {
-// method: "POST",
-// headers: {
-// "Content-Type": "application/json",
-// },
-// body: JSON.stringify(newContact),
-// }
-// );
-
-// if (!response.ok) {
-// throw new Error("Failed to add contact");
-// }
-
-// console.log("Contact added successfully");
-// setNewContact({
-// E_ID: "",
-// Name: "",
-// Contact: "",
-// disaster_type: "",
-// current_location: "",
-// isCurrentVictim: false,
-// });
-// fetchData();
-// } catch (error) {
-// console.error("Error adding contact:", error);
-// }
-// };
-
-// const [searchTerm, setSearchTerm] = useState("");
-// // Function to filter contacts based on search term
-// useEffect(() => {
-// searchContacts();
-// }, [searchTerm]);
-
-// return (
-// <>
-//
-//
-//
-// VICTIM DATA
-//
-//
-// Total No: {totalItems}
-//
-//
-// {
-// setSearchTerm(e.target.value);
-// console.log("Search Term:", e.target.value);
-// }}
-// />
-//
-//
setShowAddForm(true)}
-// >
-// Add New Victim
-//
-//
-//
-//
-//
-// ID
-// Name
-// Contact
-// Disaster Type
-// Current Location
-// Is Current Victim
-// Actions
-//
-//
-//
-// {emergencyContacts.map((contact) => (
-//
-// {contact.E_ID}
-// {contact.Name}
-// {contact.Contact}
-// {contact.disaster_type}
-// {contact.current_location}
-// {contact.isCurrentVictim ? "Yes" : "No"}
-//
-// {/* deleteContact(contact.E_ID)}
-// >
-// Delete
-//
-// */}
-// {
-// setShowEditForm(true);
-// setEditingContact(contact);
-// }}
-// >
-// Edit
-//
-//
-//
-// ))}
-//
-//
-//
-// {showEditForm && (
-//
-//
-// Edit Contact
-//
-//
-// setEditingContact({ ...editingContact, E_ID: e.target.value })
-// }
-// />
-//
-//
-// setEditingContact({ ...editingContact, Name: e.target.value })
-// }
-// />
-//
-//
-// setEditingContact({
-// ...editingContact,
-// Contact: e.target.value,
-// })
-// }
-// />
-//
-//
-// setEditingContact({
-// ...editingContact,
-// disaster_type: e.target.value,
-// })
-// }
-// />
-//
-//
-// setEditingContact({
-// ...editingContact,
-// current_location: e.target.value,
-// })
-// }
-// />
-//
-//
-// Is Current Victim:
-//
-// setEditingContact({
-// ...editingContact,
-// isCurrentVictim: e.target.checked,
-// })
-// }
-// />
-//
-//
-//
-// Update
-//
-//
-// )}
-
-// {showAddForm && (
-//
-//
-// Add New Contact
-//
-// {
-// e.preventDefault();
-// handleAdd();
-// }}
-// >
-//
-// setNewContact((prev) => ({
-// ...prev,
-// E_ID: e.target.value,
-// }))
-// }
-// />
-//
-//
-// setNewContact((prev) => ({
-// ...prev,
-// Name: e.target.value,
-// }))
-// }
-// />
-//
-//
-// setNewContact((prev) => ({
-// ...prev,
-// Contact: e.target.value,
-// }))
-// }
-// />
-//
-//
-// setNewContact((prev) => ({
-// ...prev,
-// disaster_type: e.target.value,
-// }))
-// }
-// />
-//
-//
-// setNewContact((prev) => ({
-// ...prev,
-// current_location: e.target.value,
-// }))
-// }
-// />
-//
-//
-// Is Current Victim:
-//
-// setNewContact((prev) => ({
-// ...prev,
-// isCurrentVictim: e.target.checked,
-// }))
-// }
-// />
-//
-//
-//
-// Add
-//
-//
-//
-// )}
-//
-//
-// >
-// );
-// }
-
-// export default AdminEmergency;
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminEmergency() {
- const [emergencyContacts, setEmergencyContacts] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingContact, setEditingContact] = useState(null);
- const [newContact, setNewContact] = useState({
- E_ID: "",
- Name: "",
- Contact: "",
- disaster_type: "",
- current_location: "",
- isCurrentVictim: false,
- });
- const [searchTerm, setSearchTerm] = useState("");
- const [filterCriteria, setFilterCriteria] = useState("");
-
- useEffect(() => {
- fetchData();
- }, []);
-
- useEffect(() => {
- filterContacts();
- }, [emergencyContacts, filterCriteria]);
-
- const fetchData = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/emergency_help_request_victim_records"
- );
- const data = await response.json();
- setEmergencyContacts(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteContact = async (id) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/emergency_help_request_victim_records/${id}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete contact");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting contact:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/emergency_help_request_victim_records/${editingContact.E_ID}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingContact),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update contact");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating contact:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/emergency_help_request_victim_records",
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newContact),
- }
- );
-
- if (!response.ok) {
- throw new Error("Failed to add contact");
- }
-
- console.log("Contact added successfully");
- setNewContact({
- E_ID: "",
- Name: "",
- Contact: "",
- disaster_type: "",
- current_location: "",
- isCurrentVictim: false,
- });
- fetchData();
- } catch (error) {
- console.error("Error adding contact:", error);
- }
- };
-
- const filterContacts = () => {
- let filteredContacts = emergencyContacts;
- if (filterCriteria) {
- filteredContacts = filteredContacts.filter(
- (contact) => contact.disaster_type === filterCriteria
- );
- }
- if (searchTerm) {
- filteredContacts = filteredContacts.filter((contact) =>
- contact.Name.toLowerCase().includes(searchTerm.toLowerCase())
- );
- }
- setEmergencyContacts(filteredContacts);
- };
-
- return (
- <>
-
-
-
- VICTIM DATA
-
-
- Total No: {totalItems}
-
-
- {/* {
- setSearchTerm(e.target.value);
- }}
- /> */}
- {
- setFilterCriteria(e.target.value);
- }}
- >
- Filter by Disaster Type
- Flood
- Earthquake
- Fire
- Hurricane
- Cyclone
- {/* Add other disaster types */}
-
-
-
setShowAddForm(true)}
- >
- Add New Victim
-
-
-
-
-
- ID
- Name
- Contact
- Disaster Type
- Current Location
- Is Current Victim
- Actions
-
-
-
- {emergencyContacts.map((contact) => (
-
- {contact.E_ID}
- {contact.Name}
- {contact.Contact}
- {contact.disaster_type}
- {contact.current_location}
- {contact.isCurrentVictim ? "Yes" : "No"}
-
- {
- setShowEditForm(true);
- setEditingContact(contact);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
- Edit Contact
-
- {/* Input fields for editing contact */}
-
- )}
- {showAddForm && (
-
-
- Add New Contact
-
- {/* Form for adding new contact */}
-
- )}
-
-
- >
- );
-}
-
-export default AdminEmergency;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
deleted file mode 100644
index d8db61c7..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFooter.jsx
+++ /dev/null
@@ -1,64 +0,0 @@
-import { Link } from "react-router-dom";
-
-function AdminFooter() {
- return (
-
- );
-}
-
-export default AdminFooter;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
deleted file mode 100644
index d6cbe765..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminFunds.jsx
+++ /dev/null
@@ -1,251 +0,0 @@
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminFunds() {
- const [fundsData, setFundsData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingFund, setEditingFund] = useState(null);
- const [newFund, setNewFund] = useState({
- fa_id: "",
- A_ID: "",
- amount: "",
- S_ID: "",
- });
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/funds_allocated");
- const data = await response.json();
- setFundsData(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteFund = async (id) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/funds_allocated/${id}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete fund");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting fund:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/funds_allocated/${editingFund.fa_id}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingFund),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update fund");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating fund:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/funds_allocated",
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newFund),
- }
- );
-
- if (!response.ok) {
- throw new Error("Failed to add fund");
- }
-
- console.log("Fund added successfully");
- setNewFund({
- fa_id: "",
- A_ID: "",
- amount: "",
- S_ID: "",
- });
- fetchData();
- } catch (error) {
- console.error("Error adding fund:", error);
- }
- };
-
- return (
- <>
-
-
- FUNDS ALLOCATED DATABASE
-
- Total Funds: {totalItems}
- setShowAddForm(true)}>Add New Fund
-
-
-
-
- ID
- A_ID
- Amount
- S_ID
- Actions
-
-
-
- {fundsData.map((fund) => (
-
- {fund.fa_id}
- {fund.A_ID}
- {fund.amount}
- {fund.S_ID}
-
- deleteFund(fund.fa_id)}
- >
- Delete
-
- {
- setShowEditForm(true);
- setEditingFund(fund);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
Edit Fund
-
- setEditingFund({ ...editingFund, fa_id: e.target.value })
- }
- />
-
- setEditingFund({ ...editingFund, A_ID: e.target.value })
- }
- />
-
- setEditingFund({ ...editingFund, amount: e.target.value })
- }
- />
-
- setEditingFund({ ...editingFund, S_ID: e.target.value })
- }
- />
-
- Update
-
-
- )}
-
- {showAddForm && (
-
-
Add New Fund
- {
- e.preventDefault();
- handleAdd();
- }}
- >
-
- setNewFund((prev) => ({
- ...prev,
- fa_id: e.target.value,
- }))
- }
- />
-
- setNewFund((prev) => ({
- ...prev,
- A_ID: e.target.value,
- }))
- }
- />
-
- setNewFund((prev) => ({
- ...prev,
- amount: e.target.value,
- }))
- }
- />
-
- setNewFund((prev) => ({
- ...prev,
- S_ID: e.target.value,
- }))
- }
- />
-
- Add
-
-
-
- )}
-
- >
- );
-}
-
-export default AdminFunds;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
deleted file mode 100644
index 42555d1e..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminLogin.jsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import { useState } from "react";
-import { Link, useNavigate } from "react-router-dom";
-
-const AdminLogin = () => {
- const navigate = useNavigate();
- const [email, setEmail] = useState("");
- const [password, setPassword] = useState("");
- const [error, setError] = useState("");
-
- const handleLogin = async (e) => {
- e.preventDefault();
-
- if (email === "admin@gmail.com" && password === "admin@12345") {
- // If the credentials match, navigate to the admin home page
- navigate("/adminhome");
- } else {
- // If the credentials do not match, set an error message
- setError("Invalid credentials. Please try again.");
- }
- };
-
- return (
- //
- //
Admin Login
- //
- //
- // Email:
- // setEmail(e.target.value)}
- // required
- // />
- //
- //
- // Password:
- // setPassword(e.target.value)}
- // required
- // />
- //
- // Login
- //
- //
- // Not an Admin?
- //
- // Login as User
- //
- //
- //
-
- // {error && {error}
}
- //
- //
- <>
-
-
-
-
Admin Login
-
- Welcome back! Login to continue.
-
-
-
-
-
-
- Email
-
- setEmail(e.target.value)}
- required
- />
-
-
-
- Password
-
- setPassword(e.target.value)}
- required
- />
-
-
- Login
-
-
- Not an Admin?
-
- Login as User
-
-
- {error && {error}
}
-
-
-
-
- >
- );
-};
-
-export default AdminLogin;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
deleted file mode 100644
index c7e154e3..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminNavbar.jsx
+++ /dev/null
@@ -1,162 +0,0 @@
-import { useNavigate } from "react-router-dom";
-import "./App.css";
-import "./index.css";
-
-export default function AdminNavbar() {
- const navigate = useNavigate();
-
- const handleLogout = () => {
- // Perform logout logic here
- navigate("/"); // Route to /adminlogin after logout
- };
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
deleted file mode 100644
index 47f83db2..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminRescue.jsx
+++ /dev/null
@@ -1,245 +0,0 @@
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminRescue() {
- const [rescueData, setRescueData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingRescue, setEditingRescue] = useState(null);
- const [newRescue, setNewRescue] = useState({
- rid: "",
- location: "",
- disaster_id: "",
- leader_id: "",
- });
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/rescue_team");
- const data = await response.json();
- setRescueData(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteRescue = async (id) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/rescue_team/${id}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete rescue team");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting rescue team:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/rescue_team/${editingRescue.rid}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingRescue),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update rescue team");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating rescue team:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/rescue_team", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newRescue),
- });
-
- if (!response.ok) {
- throw new Error("Failed to add rescue team");
- }
-
- console.log("Rescue team added successfully");
- setNewRescue({
- rid: "",
- location: "",
- disaster_id: "",
- leader_id: "",
- });
- fetchData();
- } catch (error) {
- console.error("Error adding rescue team:", error);
- }
- };
-
- return (
- <>
-
-
- RESCUE TEAMS DATABASE
-
- Total Rescue Teams: {totalItems}
- setShowAddForm(true)}>Add New Rescue Team
-
-
-
-
- ID
- Location
- Disaster ID
- Leader ID
- Actions
-
-
-
- {rescueData.map((rescue) => (
-
- {rescue.rid}
- {rescue.location}
- {rescue.disaster_id}
- {rescue.leader_id}
-
- deleteRescue(rescue.rid)}
- >
- Delete
-
- {
- setShowEditForm(true);
- setEditingRescue(rescue);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
Edit Rescue Team
-
- setEditingRescue({ ...editingRescue, location: e.target.value })
- }
- />
-
- setEditingRescue({
- ...editingRescue,
- disaster_id: e.target.value,
- })
- }
- />
-
- setEditingRescue({ ...editingRescue, leader_id: e.target.value })
- }
- />
-
- Update
-
-
- )}
-
- {showAddForm && (
-
-
Add New Rescue Team
- {
- e.preventDefault();
- handleAdd();
- }}
- >
-
- setNewRescue((prev) => ({
- ...prev,
- rid: e.target.value,
- }))
- }
- />
-
- setNewRescue((prev) => ({
- ...prev,
- location: e.target.value,
- }))
- }
- />
-
- setNewRescue((prev) => ({
- ...prev,
- disaster_id: e.target.value,
- }))
- }
- />
-
- setNewRescue((prev) => ({
- ...prev,
- leader_id: e.target.value,
- }))
- }
- />
-
- Add
-
-
-
- )}
-
-
- >
- );
-}
-
-export default AdminRescue;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
deleted file mode 100644
index e5964850..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminShelter.jsx
+++ /dev/null
@@ -1,259 +0,0 @@
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminShelters() {
- const [shelterData, setShelterData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingShelter, setEditingShelter] = useState(null);
- const [newShelter, setNewShelter] = useState({
- sid: "",
- location: "",
- capacity: "",
- aid: "",
- });
- const [currentLocation, setCurrentLocation] = useState("");
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/shelter");
- const data = await response.json();
- setShelterData(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteShelter = async (id) => {
- try {
- const response = await fetch(`http://localhost:8081/api/shelter/${id}`, {
- method: "DELETE",
- });
- if (!response.ok) {
- throw new Error("Failed to delete shelter");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting shelter:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/shelter/${editingShelter.sid}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingShelter),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update shelter");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating shelter:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/shelter", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newShelter),
- });
-
- if (!response.ok) {
- throw new Error("Failed to add shelter");
- }
-
- console.log("Shelter added successfully");
- setNewShelter({
- sid: "",
- location: "",
- capacity: "",
- aid: "",
- });
- fetchData();
- } catch (error) {
- console.error("Error adding shelter:", error);
- }
- };
- const handleLocationChange = (e) => {
- setCurrentLocation(e.target.value);
- };
-
- const filteredShelterData = shelterData.filter((shelter) =>
- shelter.location.toLowerCase().includes(currentLocation.toLowerCase())
- );
-
- return (
- <>
-
-
- SHELTERS DATABASE
-
-
-
- What is your current Location?
-
-
-
- Total Shelters: {totalItems}
- setShowAddForm(true)}>Add New Shelter
-
-
-
-
- ID
- Location
- Capacity
- AID
- Actions
-
-
-
- {filteredShelterData.map((shelter) => (
-
- {shelter.sid}
- {shelter.location}
- {shelter.capacity}
- {shelter.aid}
-
- deleteShelter(shelter.sid)}
- >
- Delete
-
- {
- setShowEditForm(true);
- setEditingShelter(shelter);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
Edit Shelter
-
- setEditingShelter({ ...editingShelter, location: e.target.value })
- }
- />
-
- setEditingShelter({ ...editingShelter, capacity: e.target.value })
- }
- />
-
- setEditingShelter({ ...editingShelter, aid: e.target.value })
- }
- />
-
- Update
-
-
- )}
-
- {showAddForm && (
-
-
Add New Shelter
- {
- e.preventDefault();
- handleAdd();
- }}
- >
-
- setNewShelter((prev) => ({
- ...prev,
- sid: e.target.value,
- }))
- }
- />
-
- setNewShelter((prev) => ({
- ...prev,
- location: e.target.value,
- }))
- }
- />
-
- setNewShelter((prev) => ({
- ...prev,
- capacity: e.target.value,
- }))
- }
- />
-
- setNewShelter((prev) => ({
- ...prev,
- aid: e.target.value,
- }))
- }
- />
-
- Add
-
-
-
- )}
-
-
- >
- );
-}
-
-export default AdminShelters;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
deleted file mode 100644
index e821a901..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/AdminVolunteer.jsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from "react";
-
-function AdminVolunteer() {
- return AdminVolunteer
;
-}
-
-export default AdminVolunteer;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
deleted file mode 100644
index a2e7c4fd..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminhome.jsx
+++ /dev/null
@@ -1,234 +0,0 @@
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function Adminhome() {
- return (
- <>
-
-
-
-
-
-
-
DARE
-
-
- Building stronger communities, one disaster at a time.
-
-
-
- Connecting those in need with the help they deserve
-
-
-
-
-
-
-
-
Hello Admin
-
- Welcome back, Admin! You are now logged in to the disaster
- awareness and rescue engine app.
-
-
-
-
-
- What is DARE?
-
-
-
-
-
- Oh no, the weather reports are saying a Category 5 hurricane is
- heading straight for us! What are we going to do?!
-
-
-
-
- Don't worry, DARE is here to help! We've been monitoring the
- situation closely and have evacuation plans in place. We'll help
- you.
-
-
-
-
- I just felt the ground shaking! Was that an earthquake? I'm so
- scared!
-
-
-
-
- DARE is trained to handle these situations. Take cover under a
- sturdy table or desk and hold on until the shaking stops.
-
-
-
-
- I see smoke rising in the distance! There must be a wildfire
- nearby! Are we in danger?
-
-
-
-
- DARE is already assessing the situation and coordinating with
- firefighters. We'll send out alerts if evacuations are necessary.
-
-
-
-
- The blizzard is getting worse! The roads are already impassable,
- and we're running low on supplies!
-
-
-
-
- DARE is aware of the blizzard conditions. We're working on
- clearing roads and getting essential supplies to affected areas.
-
-
-
-
-
- About DARE
-
-
-
-
- DARE, a disaster awareness and rescue engine, is your one-stop
- platform for everything disaster-related: preparedness, real-time
- emergency response, and vital rescue coordination. Empower yourself
- and your community with the knowledge and tools to navigate any
- disaster. Don't be caught off guard โ with DARE, you'll have access
- to expert-curated resources, 24/7 support, and a direct line to
- emergency services during critical moments. Whether you're facing a
- powerful hurricane, a devastating earthquake, or a sudden flood,
- DARE provides peace of mind knowing help is just a click away. Build
- a comprehensive survival plan, receive real-time updates on
- unfolding events, and connect with rescue teams seamlessly โ all
- through DARE's user-friendly interface.
-
-
-
-
- DARE Features
-
-
-
-
-
- Learn about potential hazards in your area and access essential
- survival skills.
-
-
-
-
- Connect with volunteers and first responders during emergencies.
-
-
-
-
- Enable faster and more coordinated rescue efforts. Save lives in
- critical moments.
-
-
-
-
- {/*
-
- Join DARE!
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand
- during disasters. Join our network of caring individuals who
- make a difference in times of crisis. We connect People Who Want
- to Help.
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're
- not alone!
-
-
-
- */}
-
-
- Join DARE!
-
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand during
- disasters.
-
-
- Join our network of caring individuals who make a difference in
- times of crisis. We connect People Who Want to Help.
-
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're not
- alone!
-
-
-
-
- >
- );
-}
-export default Adminhome;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
deleted file mode 100644
index 747e7a6f..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Adminsafety.jsx
+++ /dev/null
@@ -1,202 +0,0 @@
-import React, { useState, useEffect } from "react";
-import AdminFooter from "./AdminFooter";
-import AdminNavbar from "./AdminNavbar";
-
-function AdminSafety() {
- const [safetyInstructions, setSafetyInstructions] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [showEditForm, setShowEditForm] = useState(false);
- const [showAddForm, setShowAddForm] = useState(false);
- const [editingInstruction, setEditingInstruction] = useState(null);
- const [newInstruction, setNewInstruction] = useState({
- did: "",
- safety_instructions: "",
- });
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/safety_instructions"
- );
- const data = await response.json();
- setSafetyInstructions(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const deleteInstruction = async (did) => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/safety_instructions/${did}`,
- {
- method: "DELETE",
- }
- );
- if (!response.ok) {
- throw new Error("Failed to delete instruction");
- }
- fetchData();
- } catch (error) {
- console.error("Error deleting instruction:", error);
- }
- };
-
- const handleUpdate = async () => {
- try {
- const response = await fetch(
- `http://localhost:8081/api/safety_instructions/${editingInstruction.did}`,
- {
- method: "PUT",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(editingInstruction),
- }
- );
- if (!response.ok) {
- throw new Error("Failed to update instruction");
- }
- fetchData();
- setShowEditForm(false);
- } catch (error) {
- console.error("Error updating instruction:", error);
- }
- };
-
- const handleAdd = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/safety_instructions",
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newInstruction),
- }
- );
-
- if (!response.ok) {
- throw new Error("Failed to add instruction");
- }
-
- console.log("Instruction added successfully");
- setNewInstruction({ did: "", safety_instructions: "" });
- fetchData();
- } catch (error) {
- console.error("Error adding instruction:", error);
- }
- };
-
- return (
- <>
-
-
- SAFETY INSTRUCTIONS DATABASE
-
- Total Instructions: {totalItems}
- setShowAddForm(true)}>Add New Instruction
-
-
-
-
- ID
- Safety Instructions
- Actions
-
-
-
- {safetyInstructions.map((instruction) => (
-
- {instruction.did}
- {instruction.safety_instructions}
-
- deleteInstruction(instruction.did)}
- >
- Delete
-
- {
- setShowEditForm(true);
- setEditingInstruction(instruction);
- }}
- >
- Edit
-
-
-
- ))}
-
-
-
- {showEditForm && (
-
-
Edit Instruction
-
- setEditingInstruction({
- ...editingInstruction,
- safety_instructions: e.target.value,
- })
- }
- />
-
- Update
-
-
- )}
- {showAddForm && (
-
-
Add New Instruction
- {
- e.preventDefault();
- handleAdd();
- }}
- >
-
- setNewInstruction((prev) => ({
- ...prev,
- did: e.target.value,
- }))
- }
- />
-
- setNewInstruction((prev) => ({
- ...prev,
- safety_instructions: e.target.value,
- }))
- }
- />
-
- Add
-
-
-
- )}
-
-
- >
- );
-}
-
-export default AdminSafety;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
deleted file mode 100644
index 7eedc2ad..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* src/index.css or src/tailwind.css */
-@import "tailwindcss/base";
-@import "tailwindcss/components";
-@import "tailwindcss/utilities";
-/* App.css */
-.btn.btn-primary {
- padding: 0.2rem 1rem; /* Adjust padding to reduce button size */
- font-size: 0.8rem; /* Adjust font size to reduce button size */
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
deleted file mode 100644
index 8562f859..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/App.jsx
+++ /dev/null
@@ -1,55 +0,0 @@
-import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
-import LoginForm from "./LoginForm";
-import SignupForm from "./SignupForm";
-import Home from "./Home";
-import "./App.css";
-import SafetyInstructions from "./SafetyInstructions";
-import DisasterTrack from "./DisasterTrack";
-import SheltersandRescueTeams from "./Shelters&RescueTeams";
-import FundsandAidSupplies from "./Funds&AidSupplies";
-import AdminLogin from "./AdminLogin";
-import Adminhome from "./Adminhome";
-import Adminsafety from "./Adminsafety";
-import AdminDisaster from "./AdminDisaster";
-import AdminShelter from "./AdminShelter";
-import AdminFunds from "./AdminFunds";
-import AdminEmergency from "./AdminEmergency";
-import AdminAid from "./AdminAid";
-import AdminRescue from "./AdminRescue";
-import DefaultHome from "./DefaultHome";
-
-import VolunteerRegistrationForm from "./VolunteerRegistration";
-
-import Donateform from "./Donateform";
-import AdminVolunteer from "./AdminVolunteer";
-
-const App = () => {
- return (
-
-
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
-
-
- );
-};
-
-export default App;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
deleted file mode 100644
index 0d71199d..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultHome.jsx
+++ /dev/null
@@ -1,417 +0,0 @@
-// import Navbar from "./Navbar";
-// import "./App.css";
-// import Footer from "./Footer";
-// import DefaultNavbar from "./DefaultNavbar";
-// function DefaultHome() {
-// return (
-// <>
-//
-//
-//
-//
-//
DARE
-//
-//
-// Building stronger communities, one disaster at a time.
-//
-//
-//
-// Connecting those in need with the help they deserve
-//
-//
-//
-//
-//
-// What is DARE?
-//
-//
-//
-//
-//
-// Oh no, the weather reports are saying a Category 5 hurricane is
-// heading straight for us! What are we going to do?!
-//
-//
-//
-//
-// Don't worry, DARE is here to help! We've been monitoring the
-// situation closely and have evacuation plans in place. We'll help
-// you.
-//
-//
-//
-//
-// I just felt the ground shaking! Was that an earthquake? I'm so
-// scared!
-//
-//
-//
-//
-// DARE is trained to handle these situations. Take cover under a
-// sturdy table or desk and hold on until the shaking stops.
-//
-//
-//
-//
-// I see smoke rising in the distance! There must be a wildfire
-// nearby! Are we in danger?
-//
-//
-//
-//
-// DARE is already assessing the situation and coordinating with
-// firefighters. We'll send out alerts if evacuations are necessary.
-//
-//
-//
-//
-// The blizzard is getting worse! The roads are already impassable,
-// and we're running low on supplies!
-//
-//
-//
-//
-// DARE is aware of the blizzard conditions. We're working on
-// clearing roads and getting essential supplies to affected areas.
-//
-//
-//
-
-//
-// About DARE
-//
-// DARE, a disaster awareness and rescue engine, is your one-stop
-// platform for everything disaster-related: preparedness, real-time
-// emergency response, and vital rescue coordination. Empower yourself
-// and your community with the knowledge and tools to navigate any
-// disaster. Don't be caught off guard โ with DARE, you'll have access to
-// expert-curated resources, 24/7 support, and a direct line to emergency
-// services during critical moments. Whether you're facing a powerful
-// hurricane, a devastating earthquake, or a sudden flood, DARE provides
-// peace of mind knowing help is just a click away. Build a comprehensive
-// survival plan, receive real-time updates on unfolding events, and
-// connect with rescue teams seamlessly โ all through DARE's
-// user-friendly interface.
-//
-//
-// DARE Features
-//
-//
-//
-//
-//
-// Learn about potential hazards in your area and access
-// essential survival skills.
-//
-//
-//
-//
-// Connect with volunteers and first responders during
-// emergencies.
-//
-//
-//
-//
-// Enable faster and more coordinated rescue efforts. Save lives
-// in critical moments.
-//
-//
-//
-//
-//
-// Join DARE!
-//
-//
-//
-//
-//
-//
-
-//
-// Become a hero! Sign up as a volunteer to lend a helping hand
-// during disasters. Sign up as a volunteer to lend a helping hand
-// during disasters. Join our network of caring individuals who
-// make a difference in times of crisis. We connect People Who Want
-// to Help.
-//
-//
-
-//
-//
-// Use DARE!
-//
-//
-//
-//
-//
-//
-//
Get Help Now!
-//
-// Connecting survivors with the help they need quickly. You're
-// not alone!
-//
-//
-//
-//
-//
-//
-//
-// >
-// );
-// }
-
-// export default DefaultHome;
-import Navbar from "./Navbar";
-import "./App.css";
-import Footer from "./Footer";
-import DefaultNavbar from "./DefaultNavbar";
-import { useNavigate } from "react-router-dom";
-function DefaultHome() {
- const navigate = useNavigate();
- return (
- <>
-
-
-
-
-
-
-
DARE
-
-
- Building stronger communities, one disaster at a time.
-
-
-
- Connecting those in need with the help they deserve
-
-
-
-
-
-
- What is DARE?
-
-
-
-
-
- Oh no, the weather reports are saying a Category 5 hurricane is
- heading straight for us! What are we going to do?!
-
-
-
-
- Don't worry, DARE is here to help! We've been monitoring the
- situation closely and have evacuation plans in place. We'll help
- you.
-
-
-
-
- I just felt the ground shaking! Was that an earthquake? I'm so
- scared!
-
-
-
-
- DARE is trained to handle these situations. Take cover under a
- sturdy table or desk and hold on until the shaking stops.
-
-
-
-
- I see smoke rising in the distance! There must be a wildfire
- nearby! Are we in danger?
-
-
-
-
- DARE is already assessing the situation and coordinating with
- firefighters. We'll send out alerts if evacuations are necessary.
-
-
-
-
- The blizzard is getting worse! The roads are already impassable,
- and we're running low on supplies!
-
-
-
-
- DARE is aware of the blizzard conditions. We're working on
- clearing roads and getting essential supplies to affected areas.
-
-
-
-
-
- About DARE
-
-
-
-
- DARE, a disaster awareness and rescue engine, is your one-stop
- platform for everything disaster-related: preparedness, real-time
- emergency response, and vital rescue coordination. Empower yourself
- and your community with the knowledge and tools to navigate any
- disaster. Don't be caught off guard โ with DARE, you'll have access
- to expert-curated resources, 24/7 support, and a direct line to
- emergency services during critical moments. Whether you're facing a
- powerful hurricane, a devastating earthquake, or a sudden flood,
- DARE provides peace of mind knowing help is just a click away. Build
- a comprehensive survival plan, receive real-time updates on
- unfolding events, and connect with rescue teams seamlessly โ all
- through DARE's user-friendly interface.
-
-
-
-
- DARE Features
-
-
-
-
-
- Learn about potential hazards in your area and access essential
- survival skills.
-
-
-
-
- Connect with volunteers and first responders during emergencies.
-
-
-
-
- Enable faster and more coordinated rescue efforts. Save lives in
- critical moments.
-
-
-
-
- {/*
-
- Join DARE!
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand
- during disasters. Join our network of caring individuals who
- make a difference in times of crisis. We connect People Who Want
- to Help.
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're
- not alone!
-
-
-
- */}
-
-
- Join DARE!
-
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand during
- disasters.
-
-
- Join our network of caring individuals who make a difference in
- times of crisis. We connect People Who Want to Help.
-
- {/*
navigate("/v")}
- className="btn btn-outline btn-primary w-full"
- >
- Sign Up
- */}
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're not
- alone!
-
-
navigate("/safety")}
- className="btn btn-outline btn-primary w-full"
- >
- Get Help
-
-
-
-
-
- >
- );
-}
-
-export default DefaultHome;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
deleted file mode 100644
index 0a8abe03..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DefaultNavbar.jsx
+++ /dev/null
@@ -1,491 +0,0 @@
-// // import { useNavigate } from "react-router-dom";
-// // import "./App.css";
-// // import "./index.css";
-
-// // export default function DefaultNavbar() {
-// // const navigate = useNavigate();
-// // const handleLogin = () => {
-// // // Perform logout logic here
-// // navigate("/login"); // Route to /adminlogin after logout
-// // };
-// // return (
-// //
-// //
-// //
-// //
-// //
-// //
-// //
-// //
-// //
-// //
-// //
DARE
-// //
-// //
-// //
-// //
-// //
-// //
-// // Login
-// //
-// //
-// //
-// //
-// //
-// // );
-// // }
-// import { useNavigate } from "react-router-dom";
-// import "./App.css";
-// import "./index.css";
-
-// export default function DefaultNavbar() {
-// const navigate = useNavigate();
-
-// const handleLogin = () => {
-// // Perform logout logic here
-// navigate("/login"); // Route to /adminlogin after logout
-// };
-
-// return (
-//
-//
-//
-//
-//
-//
-//
-// Login
-//
-//
-//
-//
-//
-// );
-// }
-// import { useNavigate } from "react-router-dom";
-// import "./App.css";
-// import "./index.css";
-// export default function Navbar() {
-// const navigate = useNavigate();
-// const handleLogout = () => {
-// // Perform logout logic here
-// navigate("/login"); // Route to /adminlogin after logout
-// };
-// return (
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-// );
-// }
-import { useNavigate } from "react-router-dom";
-import "./App.css";
-import "./index.css";
-import { useEffect, useState } from "react";
-
-export default function DefaultNavbar() {
- const navigate = useNavigate();
- // const [loginCount, setLoginCount] = useState(0);
-
- // useEffect(() => {
- // fetchLoginCount();
- // }, []);
-
- // const fetchLoginCount = async () => {
- // try {
- // const response = await fetch("/login");
- // const data = await response.json();
- // setLoginCount(data.loginCount);
- // } catch (error) {
- // console.error("Error fetching login count:", error);
- // }
- // };
- const handleLogin = () => {
- // Perform logout logic here
- navigate("/login"); // Route to /login after logout
- };
-
- return (
-
-
-
-
- {/*
-
-
-
-
*/}
- {/*
-
*/}
- {/*
*/}
- {/*
Login Count: 6
*/}
- {/*
-
Login Count: 6 {loginCount}
*/}
-
- Login
-
-
-
- );
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
deleted file mode 100644
index 82a2e949..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/DisasterTrack.jsx
+++ /dev/null
@@ -1,383 +0,0 @@
-import { useEffect, useState } from "react";
-import Footer from "./Footer";
-import Navbar from "./Navbar";
-import "./index.css";
-function DisasterTrack() {
- const [disasterData, setDisasterData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/admindisaster");
- const data = await response.json();
- setDisasterData(data);
- setTotalItems(data.length); // Update the totalItems state
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
- return (
- <>
-
- {/*
-
-
-
-
-
- New disaster alert!
-
-
-
-
- ****** 3.8 Magnitude | Churachandpur, Manipur | 13 Mar 2024
- 13:50:58 ******
-
-
-
-
-
-
-
-
-
-
-
- New disaster alert!
-
-
-
-
- ****** 4.2 Magnitude | Andaman Sea | 12 Mar 2024 23:32:00******
-
-
-
-
-
-
-
-
-
-
-
-
- New disaster alert!
-
-
-
-
- ****** 3.9 Magnitude | Afghanistan | 12 Mar 2024 22:26:01******
-
-
-
-
-
*/}
-
-
-
-
-
-
-
- New disaster alert!
-
- {/*
-
-
- ****** 4.0 Magnitude | West Garo Hills, Meghalaya | 12 Mar 2024
- 14:27:53******
-
-
-
*/}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/*
-
-
- Avalanche in Kinnaur, Kullu, Lahul, Spiti districts of Himachal
- Pradesh
-
-
-
-
-
-
- Thunderstorm with lightning in Jhagram district of West Bengal
-
-
-
-
-
-
- Light rain in Jaiur, Alwar, Bharatpur
-
-
-
-
-
-
- Heat wave in Visakhapatnam of Andhra Pradesh
-
-
-
-
-
-
- Pre-fire alert in Madhya Pradesh
-
-
-
-
-
-
- Pre-fire alert in Mizoram, Maharashtra
-
-
-
-
- */}
-
-
-
- >
- );
-}
-
-export default DisasterTrack;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
deleted file mode 100644
index eec12476..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Donateform.jsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from "react";
-
-function Donateform() {
- return Donteform
;
-}
-
-export default Donateform;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
deleted file mode 100644
index f4fb1323..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Footer.jsx
+++ /dev/null
@@ -1,143 +0,0 @@
-// import { Link } from "react-router-dom";
-
-// function Footer() {
-// return (
-//
-// );
-// }
-
-// export default Footer;
-// import { Link } from "react-router-dom";
-
-// function Footer() {
-// return (
-//
-//
-//
-//
-//
-//
-//
-// DARE
-//
-// Connecting People Who Can Help to Those in Need.
-//
-//
-//
-//
-//
-//
-// Emergency Help Request Facility & Safety Instructions
-//
-//
-//
-//
-// Disaster Track
-//
-//
-//
-//
-// Shelter & Rescue Teams
-//
-//
-//
-//
-// Funds & Aids Supplies
-//
-//
-//
-//
-//
-//
-// );
-// }
-
-// export default Footer;
-import { Link } from "react-router-dom";
-
-function Footer() {
- return (
-
- );
-}
-
-export default Footer;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
deleted file mode 100644
index 2d7105cf..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Funds&AidSupplies.jsx
+++ /dev/null
@@ -1,107 +0,0 @@
-import { useNavigate } from "react-router-dom";
-import Footer from "./Footer";
-import Navbar from "./Navbar";
-
-function FundsandAidSupplies() {
- const navigate = useNavigate();
- return (
- <>
-
-
-
-
-
-
-
- Support Disaster Relief Efforts Now!
-
-
- "Your generosity can be the lifeline for those facing the
- aftermath of disasters. Together, let's make a difference by
- extending a helping hand to those in need. Every donation, no
- matter how small, brings hope and relief to communities in
- crisis. Join us in making a meaningful impact today."
-
-
- {/*
{
- navigate("/donate");
- }}
- >
- {" "}
- Donate Now
- */}
-
-
-
-
- How you can help?
-
-
-
-
-
-
-
-
Donate Funds:
-
- Your donations will be used to address the most critical needs.
- Your generosity will have a positive impact donations will have
- on the lives of those affected. Your donations will be used to:
-
-
- Providing food, water, and shelter to displaced families.
-
-
- Delivering medical supplies and supporting healthcare
- services.
-
-
- Aiding in search and rescue efforts. Assisting with
- long-term recovery and rebuilding efforts.
-
-
-
-
-
-
-
-
-
-
-
-
-
Donate Supplies:
-
- Because of your generosity, this family won't have to go hungry
- or sleep in the cold. Donate essential supplies today. Help
- bring comfort and security to families affected by disaster.
- Donate blankets and non-perishable food now.
-
- Non-perishable
- Hygiene products
- Food
- Blankets
- First-Aid kits
-
-
-
-
-
-
-
- >
- );
-}
-
-export default FundsandAidSupplies;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
deleted file mode 100644
index b8fa53eb..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Home.jsx
+++ /dev/null
@@ -1,241 +0,0 @@
-import Navbar from "./Navbar";
-import "./App.css";
-import Footer from "./Footer";
-import DefaultNavbar from "./DefaultNavbar";
-import { useNavigate } from "react-router-dom";
-function Home() {
- const navigate = useNavigate();
- return (
- <>
-
-
-
-
-
-
-
DARE
-
-
- Building stronger communities, one disaster at a time.
-
-
-
- Connecting those in need with the help they deserve
-
-
-
-
-
-
- What is DARE?
-
-
-
-
-
- Oh no, the weather reports are saying a Category 5 hurricane is
- heading straight for us! What are we going to do?!
-
-
-
-
- Don't worry, DARE is here to help! We've been monitoring the
- situation closely and have evacuation plans in place. We'll help
- you.
-
-
-
-
- I just felt the ground shaking! Was that an earthquake? I'm so
- scared!
-
-
-
-
- DARE is trained to handle these situations. Take cover under a
- sturdy table or desk and hold on until the shaking stops.
-
-
-
-
- I see smoke rising in the distance! There must be a wildfire
- nearby! Are we in danger?
-
-
-
-
- DARE is already assessing the situation and coordinating with
- firefighters. We'll send out alerts if evacuations are necessary.
-
-
-
-
- The blizzard is getting worse! The roads are already impassable,
- and we're running low on supplies!
-
-
-
-
- DARE is aware of the blizzard conditions. We're working on
- clearing roads and getting essential supplies to affected areas.
-
-
-
-
-
- About DARE
-
-
-
-
- DARE, a disaster awareness and rescue engine, is your one-stop
- platform for everything disaster-related: preparedness, real-time
- emergency response, and vital rescue coordination. Empower yourself
- and your community with the knowledge and tools to navigate any
- disaster. Don't be caught off guard โ with DARE, you'll have access
- to expert-curated resources, 24/7 support, and a direct line to
- emergency services during critical moments. Whether you're facing a
- powerful hurricane, a devastating earthquake, or a sudden flood,
- DARE provides peace of mind knowing help is just a click away. Build
- a comprehensive survival plan, receive real-time updates on
- unfolding events, and connect with rescue teams seamlessly โ all
- through DARE's user-friendly interface.
-
-
-
-
- DARE Features
-
-
-
-
-
- Learn about potential hazards in your area and access essential
- survival skills.
-
-
-
-
- Connect with volunteers and first responders during emergencies.
-
-
-
-
- Enable faster and more coordinated rescue efforts. Save lives in
- critical moments.
-
-
-
-
- {/*
-
- Join DARE!
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand
- during disasters. Join our network of caring individuals who
- make a difference in times of crisis. We connect People Who Want
- to Help.
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're
- not alone!
-
-
-
- */}
-
-
- Join DARE!
-
-
-
-
-
-
-
- Become a hero! Sign up as a volunteer to lend a helping hand during
- disasters.
-
-
- Join our network of caring individuals who make a difference in
- times of crisis. We connect People Who Want to Help.
-
- {/*
navigate("/v")}
- className="btn btn-outline btn-primary w-full"
- >
- Sign Up
- */}
-
-
-
-
- Use DARE!
-
-
-
-
-
-
-
- Get Help Now!
-
-
- Connecting survivors with the help they need quickly. You're not
- alone!
-
-
navigate("/safety")}
- className="btn btn-outline btn-primary w-full"
- >
- Get Help
-
-
-
-
-
- >
- );
-}
-
-export default Home;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
deleted file mode 100644
index f2ca25c8..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/LoginForm.jsx
+++ /dev/null
@@ -1,273 +0,0 @@
-// import { useState } from "react";
-// import { Link, useNavigate } from "react-router-dom";
-// import axios from "axios";
-// import "./App.css";
-
-// const LoginForm = () => {
-// const navigate = useNavigate();
-// const [email, setEmail] = useState("");
-// const [password, setPassword] = useState("");
-// const [error, setError] = useState("");
-
-// const handleLogin = async (e) => {
-// e.preventDefault();
-
-// // Email validation regex
-// const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
-
-// if (!emailRegex.test(email)) {
-// setError("Please enter a valid email address.");
-// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
-// return;
-// }
-
-// try {
-// const response = await axios.post("http://localhost:8081/login", {
-// email,
-// password,
-// });
-// if (response.data.message === "Login successful") {
-// navigate("/home");
-// } else {
-// setError(response.data.error);
-// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
-// }
-// } catch (error) {
-// console.error("Login error:", error);
-// setError("An error occurred while logging in");
-// setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
-// }
-// };
-
-// return (
-// <>
-//
-//
-//
Login
-//
-//
-//
-//
-//
-// setEmail(e.target.value)}
-// required
-// />
-// Email
-//
-//
-//
-//
-//
-// setPassword(e.target.value)}
-// required
-// autoComplete="off"
-// />
-// Password
-//
-//
-// Login
-//
-//
-//
-// Don't have an account?{" "}
-//
-// Register
-//
-//
-//
-//
-//
-//
-// Login as Admin
-//
-//
-//
-// {error && (
-//
-// )}
-//
-//
-//
-// >
-// );
-// };
-
-// export default LoginForm;
-import { useState } from "react";
-import { Link, useNavigate } from "react-router-dom";
-import axios from "axios";
-
-const LoginForm = () => {
- const navigate = useNavigate();
- const [email, setEmail] = useState("");
- const [password, setPassword] = useState("");
- const [error, setError] = useState("");
-
- const handleLogin = async (e) => {
- e.preventDefault();
-
- // Email validation regex
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
-
- if (!emailRegex.test(email)) {
- setError("Please enter a valid email address.");
- setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
- return;
- }
-
- try {
- const response = await axios.post("http://localhost:8081/login", {
- email,
- password,
- });
- if (response.data.message === "Login successful") {
- navigate("/home");
- } else {
- setError(response.data.error);
- setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
- }
- } catch (error) {
- console.error("Login error:", error);
- setError("An error occurred while logging in");
- setTimeout(() => setError(""), 2000); // Clear error after 2 seconds
- }
- };
-
- return (
- //
- //
- //
- //
Login now!
- //
- // Login and use DARE - your one-step platform for help during
- // disasters!
- //
- //
- //
- //
- //
- //
- // Email
- //
- // setEmail(e.target.value)}
- // required
- // />
- //
- //
- //
- // Password
- //
- // setPassword(e.target.value)}
- // required
- // />
- //
- //
- // Login
- //
- // {error && {error}
}
- //
- //
- // Don't have an account? Register
- //
- //
- //
- //
- // Login as Admin
- //
- //
- //
- //
- //
- //
-
-
-
-
Login now!
-
- Login and use DARE - your one-step platform for help during
- disasters!
-
-
-
-
-
-
- Email
-
- setEmail(e.target.value)}
- required
- />
-
-
-
- Password
-
- setPassword(e.target.value)}
- required
- />
-
-
-
- Login
-
-
- {error && {error}
}
-
- Don't have an account?
-
- Register
-
-
-
-
- Login as Admin
-
-
- {/*
-
- Login as Volunteer
-
- */}
-
-
-
-
- );
-};
-
-export default LoginForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
deleted file mode 100644
index ac931cb7..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Navbar.jsx
+++ /dev/null
@@ -1,319 +0,0 @@
-// import { useNavigate } from "react-router-dom";
-// import "./App.css";
-// import "./index.css";
-// export default function Navbar() {
-// const navigate = useNavigate();
-// const handleLogout = () => {
-// // Perform logout logic here
-// navigate("/login"); // Route to /adminlogin after logout
-// };
-// return (
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-// );
-// }
-import { useNavigate } from "react-router-dom";
-import "./App.css";
-import "./index.css";
-import { useEffect, useState } from "react";
-
-export default function Navbar() {
- const navigate = useNavigate();
- const [loginCount, setLoginCount] = useState(0);
-
- useEffect(() => {
- fetchLoginData();
- });
- // const fetchIdLogin = async () => {
- // try {
- // const response = await fetch("http://localhost:8081/login/:idlogin");
- // const data = await response.json();
- // const idlogin = data.idlogin;
- // setIdLogin(idlogin);
- // } catch (error) {
- // console.error("Error fetching current user ID:", error);
- // }
- // fetchLoginCount(idlogin);
- // };
-
- const fetchLoginData = async () => {
- try {
- // Make a GET request to the endpoint with the dynamic idlogin
- const response = await fetch(`http://localhost:8081/login/2`);
-
- // Check if the response is successful (status 200)
- if (response.ok) {
- // Parse the response body as JSON
- const data = await response.json();
- // Access the loginCount and idlogin from the data object
- const { loginCount, idlogin } = data;
- setLoginCount(data.loginCount);
- // Handle the data as needed, for example, log it to the console
- console.log("Login Count:", loginCount);
- console.log("ID Login:", idlogin);
- } else {
- // If response is not successful, throw an error
- throw new Error("Failed to fetch data");
- }
- } catch (error) {
- // Handle any errors that occur during the fetch operation
- console.error("Error fetching login data:", error);
- }
- };
-
- // Example usage: Fetch login data for idlogin 1
- fetchLoginData(1);
-
- const handleLogout = () => {
- // Perform logout logic here
- navigate("/"); // Route to /login after logout
- };
-
- return (
-
-
-
-
- {/*
-
-
-
-
*/}
- {/*
-
*/}
- {/*
*/}
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
deleted file mode 100644
index 4149abef..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SafetyInstructions.jsx
+++ /dev/null
@@ -1,609 +0,0 @@
-// import Footer from "./Footer";
-// import Navbar from "./Navbar";
-// function SafetyInstructions() {
-// return (
-// <>
-//
-//
-//
-//
-//
Get Help now!
-//
-// Tell us your current location and we will reach out to you!
-//
-//
-//
-//
-//
-//
-// Disaster Type:
-//
-//
-//
-//
-//
-// Current Location
-//
-//
-//
-// {/* Open the modal using document.getElementById('ID').showModal() method */}
-//
-// document.getElementById("my_modal_1").showModal()
-// }
-// >
-// Submit
-//
-//
-//
-//
Hello!
-//
-// Your request has been received! Go through safety
-// Instructions below and stay safe.
-//
-//
-//
-// {/* if there is a button in form, it will close the modal */}
-// Close
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-// Earthquake Safety Instructions:
-//
-//
-// Drop, Cover, and Hold On: Drop to the ground, take cover under a
-// sturdy piece of furniture, and hold on until the shaking stops.
-//
-//
-// Stay Indoors: If indoors, stay there until the shaking stops and
-// it's safe to exit. Avoid doorways, windows, and elevators.
-//
-//
-// If Outdoors: Move to an open area away from buildings, trees,
-// streetlights, and utility wires.
-//
-//
-// Be Prepared: Have an earthquake kit ready with essentials such as
-// water, food, flashlight, first aid supplies, and important
-// documents.
-//
-//
-//
-
-//
-// Hurricane Safety Instructions:
-//
-//
-// Evacuation Plan: Follow evacuation orders if issued. Know your
-// evacuation route and have a plan in place.
-//
-//
-// Secure Property: Board up windows, secure outdoor objects, and
-// move vehicles to higher ground if possible.
-//
-//
-// Stay Informed: Keep track of weather updates and heed warnings
-// from local authorities.
-//
-//
-// Stock Supplies: Have a hurricane kit with water, non-perishable
-// food, medications, flashlights, batteries, and important
-// documents.
-//
-//
-//
-
-//
-// Flood Safety Instructions:
-//
-//
-// Evacuate if Necessary: Move to higher ground if flooding is
-// imminent. Never drive through flooded areas.
-//
-//
-// Turn Off Utilities: Shut off electricity and gas to prevent
-// accidents.
-//
-//
-// Avoid Contact with Floodwater: It may be contaminated or carry
-// debris.
-//
-//
-// Listen to Authorities: Follow instructions from emergency services
-// and evacuate when advised.
-//
-//
-//
-
-//
-// Wildfire Safety Instructions:
-//
-//
-// Create Defensible Space: Clear brush and vegetation around your
-// property to reduce the risk of fire spreading.
-//
-//
-// Prepare Your Home: Use fire-resistant materials for roofing and
-// siding. Keep gutters and roofs clear of debris.
-//
-//
-// Evacuation Plan: Have a plan in place and be ready to evacuate if
-// necessary. Keep important documents and valuables ready to go.
-//
-//
-// Monitor Alerts: Stay informed about wildfire alerts and evacuation
-// orders. Listen to local authorities and be prepared to act
-// quickly.
-//
-//
-//
-//
-
-//
-// >
-// );
-// }
-
-// export default SafetyInstructions;
-import { useState, useEffect } from "react";
-import Footer from "./Footer";
-import Navbar from "./Navbar";
-
-function SafetyInstructions() {
- const [selectedDisaster, setSelectedDisaster] = useState("");
- const [safetyInstructions, setSafetyInstructions] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [searchTerm, setSearchTerm] = useState("");
-
- useEffect(() => {
- fetchData();
- }, []);
-
- const handleSearch = (event) => {
- setSearchTerm(event.target.value);
- };
-
- const fetchData = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/safety_instructions"
- );
- const data = await response.json();
- setSafetyInstructions(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const [instructions, setInstructions] = useState([]);
- const [emergencyContacts, setEmergencyContacts] = useState([]);
- const [newContact, setNewContact] = useState({
- Name: "",
- Contact: "",
- disaster_type: "",
- current_location: "",
- isCurrentVictim: false,
- });
-
- useEffect(() => {
- if (selectedDisaster) {
- fetchSafetyInstructions(selectedDisaster);
- }
- }, [selectedDisaster]);
-
- const fetchSafetyInstructions = async (disasterType) => {
- try {
- const response = await fetch(`/api/safety_instructions/${disasterType}`);
- if (response.ok) {
- const data = await response.json();
- setInstructions(data);
- } else {
- console.error(
- "Failed to fetch safety instructions:",
- response.statusText
- );
- }
- } catch (error) {
- console.error("Error fetching safety instructions:", error);
- }
- };
-
- useEffect(() => {
- fetchDatas();
- }, []);
-
- const fetchDatas = async () => {
- try {
- const response = await fetch(
- "http://localhost:8081/api/emergency_help_request_victim_records"
- );
- const data = await response.json();
- setEmergencyContacts(data);
- } catch (error) {
- console.error("Error fetching data:", error);
- }
- };
-
- const handleSelectChange = (event) => {
- setSelectedDisaster(event.target.value);
- };
- const handleAdd = async () => {
- try {
- console.log("Sending new contact:", newContact); // Log the data being sent
- const response = await fetch(
- "http://localhost:8081/api/emergency_help_request_victim_records",
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(newContact),
- }
- );
-
- if (!response.ok) {
- throw new Error("Failed to add contact");
- }
-
- console.log("Contact added successfully");
- setNewContact({
- Name: "",
- Contact: "",
- disaster_type: "",
- current_location: "",
- isCurrentVictim: false,
- });
- fetchData();
- } catch (error) {
- console.error("Error adding contact:", error);
- }
- };
-
- return (
- <>
-
-
-
-
-
- Get Help now!
-
-
- Tell us your current location and we will reach out to you!
-
-
-
-
{
- e.preventDefault();
- handleAdd();
- }}
- >
-
-
- Name:
-
-
- setNewContact((prev) => ({
- ...prev,
- Name: e.target.value,
- }))
- }
- />
-
-
-
- Contact:
-
-
- setNewContact((prev) => ({
- ...prev,
- Contact: e.target.value,
- }))
- }
- />
-
-
-
- Disaster Type:
-
-
- setNewContact((prev) => ({
- ...prev,
- disaster_type: e.target.value,
- }))
- }
- />
-
-
-
- Current Location:
-
-
- setNewContact((prev) => ({
- ...prev,
- current_location: e.target.value,
- }))
- }
- />
-
- {/*
-
- Are you a Victim?
-
-
- setNewContact((prev) => ({
- ...prev,
- isCurrentVictim: e.target.checked,
- }))
- }
- />
-
*/}
-
- {/* Open the modal using document.getElementById('ID').showModal() method */}
-
- document.getElementById("my_modal_1").showModal()
- }
- >
- Submit
-
-
-
-
-
Hello!
-
- Your request has been received! Go through safety Instructions
- below and stay safe.
-
-
-
- {/* if there is a button in form, it will close the modal */}
- Close
-
-
-
-
-
-
-
- {/*
-
-
- Disaster Type:
-
-
-
-
- Select a disaster type
-
-
- Earthquake
-
-
- Hurricane
-
-
- Flood
-
-
- Wildfire
-
-
-
-
- {selectedDisaster === "earthquake" && (
-
- Earthquake Safety Instructions:
-
-
- Drop, Cover, and Hold On: Drop to the ground, take cover under a
- sturdy piece of furniture, and hold on until the shaking stops.
-
-
- Stay Indoors: If indoors, stay there until the shaking stops and
- it's safe to exit. Avoid doorways, windows, and elevators.
-
-
- If Outdoors: Move to an open area away from buildings, trees,
- streetlights, and utility wires.
-
-
- Be Prepared: Have an earthquake kit ready with essentials such
- as water, food, flashlight, first aid supplies, and important
- documents.
-
-
-
- )}
-
- {selectedDisaster === "hurricane" && (
-
- Hurricane Safety Instructions:
-
-
- Evacuation Plan: Follow evacuation orders if issued. Know your
- evacuation route and have a plan in place.
-
-
- Secure Property: Board up windows, secure outdoor objects, and
- move vehicles to higher ground if possible.
-
-
- Stay Informed: Keep track of weather updates and heed warnings
- from local authorities.
-
-
- Stock Supplies: Have a hurricane kit with water, non-perishable
- food, medications, flashlights, batteries, and important
- documents.
-
-
-
- )}
-
- {selectedDisaster === "flood" && (
-
- Flood Safety Instructions:
-
-
- Evacuate if Necessary: Move to higher ground if flooding is
- imminent. Never drive through flooded areas.
-
-
- Turn Off Utilities: Shut off electricity and gas to prevent
- accidents.
-
-
- Avoid Contact with Floodwater: It may be contaminated or carry
- debris.
-
-
- Listen to Authorities: Follow instructions from emergency
- services and evacuate when advised.
-
-
-
- )}
-
- {selectedDisaster === "wildfire" && (
-
- Wildfire Safety Instructions:
-
-
- Create Defensible Space: Clear brush and vegetation around your
- property to reduce the risk of fire spreading.
-
-
- Prepare Your Home: Use fire-resistant materials for roofing and
- siding. Keep gutters and roofs clear of debris.
-
-
- Evacuation Plan: Have a plan in place and be ready to evacuate
- if necessary. Keep important documents and valuables ready to
- go.
-
-
- Monitor Alerts: Stay informed about wildfire alerts and
- evacuation orders. Listen to local authorities and be prepared
- to act quickly.
-
-
-
- )}
- */}
-
-
-
- Safety Instructions
-
-
-
-
- {/*
-
-
- Safety Instructions
-
-
-
- {safetyInstructions
- .filter((instruction) =>
- instruction.safety_instructions
- .toLowerCase()
- .includes(searchTerm.toLowerCase())
- )
- .map((instruction, index) => (
-
- {instruction.safety_instructions}
-
- ))}
-
-
*/}
-
-
-
-
- Safety Instructions
-
-
-
-
- {safetyInstructions
- .filter((instruction) =>
- instruction.safety_instructions
- .toLowerCase()
- .includes(searchTerm.toLowerCase())
- )
- .map((instruction, index) => (
-
-
-
- {instruction.safety_instructions}
-
-
-
- ))}
-
-
-
-
- >
- );
-}
-
-export default SafetyInstructions;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
deleted file mode 100644
index 252b35e4..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Shelters&RescueTeams.jsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import { useEffect, useState } from "react";
-import Footer from "./Footer";
-import Navbar from "./Navbar";
-
-function SheltersandRescueTeams() {
- const [shelterData, setShelterData] = useState([]);
- const [totalItem, setTotalItem] = useState(0);
- const [rescueData, setRescueData] = useState([]);
- const [totalItems, setTotalItems] = useState(0);
- const [currentLocation, setCurrentLocation] = useState("");
-
- useEffect(() => {
- fetchData();
- fetchRescueData();
- }, []);
-
- const fetchData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/shelter");
- const data = await response.json();
- setShelterData(data);
- setTotalItems(data.length);
- } catch (error) {
- console.error("Error fetching shelter data:", error);
- }
- };
-
- const fetchRescueData = async () => {
- try {
- const response = await fetch("http://localhost:8081/api/rescue_team");
- const data = await response.json();
- setRescueData(data);
- setTotalItem(data.length);
- } catch (error) {
- console.error("Error fetching rescue team data:", error);
- }
- };
-
- const handleLocationChange = (e) => {
- setCurrentLocation(e.target.value);
- };
-
- const filteredShelterData = shelterData.filter((shelter) =>
- shelter.location.toLowerCase().includes(currentLocation.toLowerCase())
- );
-
- const filteredRescueData = rescueData.filter((rescue) =>
- rescue.location.toLowerCase().includes(currentLocation.toLowerCase())
- );
-
- return (
- <>
-
-
-
- Shelters Near You
-
-
-
-
-
- ID
- Location
- Capacity
- AID
-
-
-
- {filteredShelterData.map((shelter) => (
-
- {shelter.sid}
- {shelter.location}
- {shelter.capacity}
- {shelter.aid}
-
- ))}
-
-
-
-
-
- Rescue Teams
-
-
-
-
-
- ID
- Location
-
-
-
- {filteredRescueData.map((rescue) => (
-
- {rescue.rid}
- {rescue.location}
-
- ))}
-
-
-
-
- >
- );
-}
-
-export default SheltersandRescueTeams;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
deleted file mode 100644
index 92d5a078..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/SignupForm.jsx
+++ /dev/null
@@ -1,253 +0,0 @@
-import { useState } from "react";
-import { Link, useNavigate } from "react-router-dom";
-import axios from "axios";
-import "./App.css";
-
-const SignupForm = () => {
- const navigate = useNavigate();
- const [formData, setFormData] = useState({
- name: "",
- email: "",
- password: "",
- });
-
- const [error, setError] = useState("");
-
- const { name, email, password } = formData;
-
- const handleChange = (event) => {
- const { name, value } = event.target;
- setFormData({ ...formData, [name]: value });
- };
- const handleSignup = async (e) => {
- e.preventDefault();
-
- // Input validation
- if (!name.trim() || !email.trim() || !password.trim()) {
- setError("Please fill in all fields");
- return;
- }
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
- if (!emailRegex.test(email)) {
- setError("Please enter a valid email address");
- return;
- }
-
- if (password.length < 8) {
- setError("Password must be at least 8 characters long");
- return;
- }
-
- try {
- const response = await axios.post(
- "http://localhost:8081/signup",
- {
- name: name,
- email: email,
- password: password,
- },
- { withCredentials: true }
- );
-
- if (response.data.error) {
- // Set specific error message based on backend response
- switch (response.data.error) {
- case "Please provide all required fields":
- setError(
- "Missing required fields. Please fill out the form completely."
- );
- break;
- case "Please enter a valid 10-digit contact number":
- setError(
- "Invalid phone number. Please enter a valid 10-digit number."
- );
- break;
- case "Please enter a valid email address":
- setError(
- "Invalid email address. Please enter a valid email format."
- );
- break;
- case "Password must be at least 8 characters long":
- setError(
- "Password is too short. Please enter at least 8 characters."
- );
- break;
- default:
- setError(
- "An error occurred during signup. Please try again later."
- );
- }
- } else {
- navigate("/"); // Redirect to dashboard on successful signup
- }
- } catch (error) {
- console.error("Signup error:", error);
- // Enhanced error logging
- if (error.response) {
- // The request was made and the server responded with a status code
- // that falls out of the range of 2xx
- console.error(
- "Server responded with status code:",
- error.response.status
- );
- console.error("Response data:", error.response.data);
- } else if (error.request) {
- // The request was made but no response was received
- console.error("No response received:", error.request);
- } else {
- // Something happened in setting up the request that triggered an Error
- console.error("Error", error.message);
- }
- console.error("Config:", error.config);
-
- setError("An error occurred while signing up. Please try again later.");
- }
- };
- return (
- <>
- {/*
-
-
-
Sign up now!
-
- Sign up and join DARE - your one-step platform for help during
- disasters!
-
-
-
-
-
-
- Name
-
-
-
-
-
- Email
-
-
-
-
-
- Password
-
-
-
-
- Signup
-
-
-
- {error &&
{error}
}
-
- Already have an account?
-
- Login
-
-
-
-
-
*/}
-
-
-
-
Sign up now!
-
- Sign up and join DARE - your one-stop platform for help during
- disasters!
-
-
-
-
-
- >
- );
-};
-
-export default SignupForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
deleted file mode 100644
index 7d6c6f37..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/VolunteerRegistration.jsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import React, { useState } from "react";
-
-function VolunteerRegistrationForm() {
- const [showForm, setShowForm] = useState(false);
-
- const handleRegisterClick = () => {
- setShowForm(true);
- };
-
- return (
-
-
Register as Volunteer
- Register
- {showForm && (
-
- Name:
-
-
- Contact:
-
-
- Expertise:
-
-
- Address:
-
-
- Current Status:
-
- Active
- Inactive
-
-
- Submit
-
- )}
-
- );
-}
-
-export default VolunteerRegistrationForm;
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css b/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
deleted file mode 100644
index 4aa40750..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/index.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/* src/index.css or src/tailwind.css */
-@import "tailwindcss/base";
-@import "tailwindcss/components";
-@import "tailwindcss/utilities";
-
-@keyframes blink {
- 0% {
- opacity: 1;
- }
- 50% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
-}
-
-@keyframes scroll-left {
- 0% {
- transform: translateX(100%);
- }
- 100% {
- transform: translateX(-100%);
- }
-}
-
-.animate-scroll {
- animation: scroll-left 20s linear infinite;
- white-space: nowrap;
-}
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx b/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
deleted file mode 100644
index 54b39dd1..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/main.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react'
-import ReactDOM from 'react-dom/client'
-import App from './App.jsx'
-import './index.css'
-
-ReactDOM.createRoot(document.getElementById('root')).render(
-
-
- ,
-)
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
deleted file mode 100644
index ae7ddbcb..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/tailwind.config.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// tailwind.config.js
-import daisyui from "./node_modules/daisyui";
-
-/** @type {import('tailwindcss').Config} */
-export default {
- content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
- theme: {
- extend: {
- colors: {
- "fantasy-primary": "#8A2BE2", // Purple
- "fantasy-secondary": "#00FF00", // Lime
- "fantasy-accent": "#FFD700", // Gold
- "fantasy-neutral": "#D3D3D3", // Light Gray
- },
- keyframes: {
- blink: {
- "0%": { opacity: 1 },
- "50%": { opacity: 0 },
- "100%": { opacity: 1 },
- },
- },
- animation: {
- blink: "blink 1s infinite",
- marquee: "marquee 20s linear infinite",
- },
- },
- },
- plugins: [daisyui],
- daisyui: {
- themes: [
- {
- mytheme: {
- primary: "#8A2BE2", // Use actual color value
- "primary-focus": "#00FF00", // Use actual color value
- "primary-content": "#FFD700", // Use actual color value
- secondary: "#00FF00", // Use actual color value
- "secondary-focus": "#8A2BE2", // Use actual color value
- "secondary-content": "#FFD700", // Use actual color value
- accent: "#FFD700", // Use actual color value
- "accent-focus": "#8A2BE2", // Use actual color value
- "accent-content": "#00FF00", // Use actual color value
- neutral: "#D3D3D3", // Use actual color value
- "neutral-focus": "#8A2BE2", // Use actual color value
- "neutral-content": "#FFD700", // Use actual color value
-
- // Define other theme properties as needed
- },
- },
- ],
- },
-};
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js b/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
deleted file mode 100644
index eb37550b..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/vite.config.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { defineConfig } from "vite";
-import react from "@vitejs/plugin-react";
-import commonjs from "vite-plugin-commonjs"; // Add this line
-
-export default defineConfig({
- plugins: [react(), commonjs()],
- // ... other Vite configuration
-});
From 1471f56b4aff2cae06a3c8987ce9298bbdc7525f Mon Sep 17 00:00:00 2001
From: shwetharbaliga
Date: Sat, 1 Nov 2025 00:00:30 +0530
Subject: [PATCH 4/5] revert commit - wrong commit
---
.idea/.gitignore | 5 +++++
.idea/ProjectHive.iml | 9 +++++++++
.idea/misc.xml | 6 ++++++
.idea/modules.xml | 8 ++++++++
.idea/vcs.xml | 6 ++++++
.../MiniProjects/DARE/Frontend/README.md | 8 ++++++++
.../DARE/Frontend/src/Untitled-1.js | 19 +++++++++++++++++++
.../DARE/Frontend/src/assets/react.svg | 1 +
8 files changed, 62 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/ProjectHive.iml
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/README.md
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
create mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 00000000..a0ccf77b
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Environment-dependent path to Maven home directory
+/mavenHomeManager.xml
diff --git a/.idea/ProjectHive.iml b/.idea/ProjectHive.iml
new file mode 100644
index 00000000..d6ebd480
--- /dev/null
+++ b/.idea/ProjectHive.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..639900d1
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..1f980baf
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/README.md b/Domains/FullStack/MiniProjects/DARE/Frontend/README.md
new file mode 100644
index 00000000..f768e33f
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/README.md
@@ -0,0 +1,8 @@
+# React + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
new file mode 100644
index 00000000..209df2d1
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
@@ -0,0 +1,19 @@
+ app.post("/login", async (req, res) => {
+ const { email, password } = req.body;
+ // ... (existing code to authenticate user)
+
+ // If the user is authenticated, insert a new record into the login table
+ if (isAuthenticated) {
+ try {
+ const [result] = await connection.execute(
+ "INSERT INTO login (email, password) VALUES (?, ?)",
+ [email, hashedPassword]
+ );
+ // ... (existing code to handle successful login)
+ } catch (error) {
+ console.error("Error inserting login record:", error);
+ res.status(500).json({ message: "Internal Server Error" });
+ }
+ }
+ // ... (existing code to handle failed login)
+ });
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg b/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
new file mode 100644
index 00000000..6c87de9b
--- /dev/null
+++ b/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
From 74d3539f118d8a426da0ad7ed72139ccec0aba32 Mon Sep 17 00:00:00 2001
From: shwetharbaliga
Date: Sat, 1 Nov 2025 00:05:04 +0530
Subject: [PATCH 5/5] deleted wrong commit
---
.../MiniProjects/DARE/Frontend/README.md | 8 --------
.../DARE/Frontend/src/Untitled-1.js | 19 -------------------
.../DARE/Frontend/src/assets/react.svg | 1 -
3 files changed, 28 deletions(-)
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/README.md
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
delete mode 100644 Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/README.md b/Domains/FullStack/MiniProjects/DARE/Frontend/README.md
deleted file mode 100644
index f768e33f..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# React + Vite
-
-This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
-
-Currently, two official plugins are available:
-
-- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
-- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js b/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
deleted file mode 100644
index 209df2d1..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/Untitled-1.js
+++ /dev/null
@@ -1,19 +0,0 @@
- app.post("/login", async (req, res) => {
- const { email, password } = req.body;
- // ... (existing code to authenticate user)
-
- // If the user is authenticated, insert a new record into the login table
- if (isAuthenticated) {
- try {
- const [result] = await connection.execute(
- "INSERT INTO login (email, password) VALUES (?, ?)",
- [email, hashedPassword]
- );
- // ... (existing code to handle successful login)
- } catch (error) {
- console.error("Error inserting login record:", error);
- res.status(500).json({ message: "Internal Server Error" });
- }
- }
- // ... (existing code to handle failed login)
- });
\ No newline at end of file
diff --git a/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg b/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
deleted file mode 100644
index 6c87de9b..00000000
--- a/Domains/FullStack/MiniProjects/DARE/Frontend/src/assets/react.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file