Spaces:
Sleeping
Sleeping
Commit ·
e17c25d
1
Parent(s): 05fbed5
FIX: Add missing SendGrid dependency to package.json
Browse files- README_HF.md +0 -48
- package-lock.json +202 -0
- package.json +2 -0
README_HF.md
DELETED
|
@@ -1,48 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: RetroTech Inventory API
|
| 3 |
-
emoji: 🎮
|
| 4 |
-
colorFrom: cyan
|
| 5 |
-
colorTo: blue
|
| 6 |
-
sdk: docker
|
| 7 |
-
pinned: false
|
| 8 |
-
license: mit
|
| 9 |
-
short_description: A retro-themed inventory management system API
|
| 10 |
-
---
|
| 11 |
-
|
| 12 |
-
# RetroTech Inventory API
|
| 13 |
-
|
| 14 |
-
A beautiful retro-themed inventory management system backend built with Node.js, Express, and MongoDB.
|
| 15 |
-
|
| 16 |
-
## Features
|
| 17 |
-
|
| 18 |
-
- 🔐 JWT Authentication
|
| 19 |
-
- 📦 Product Management (CRUD operations)
|
| 20 |
-
- 📊 Low Stock Alerts with Email Notifications
|
| 21 |
-
- 🎮 Retro Tech Theme
|
| 22 |
-
- 📱 RESTful API
|
| 23 |
-
|
| 24 |
-
## API Endpoints
|
| 25 |
-
|
| 26 |
-
### Authentication
|
| 27 |
-
- `POST /api/users` - Register a new user
|
| 28 |
-
- `POST /api/users/login` - Login user
|
| 29 |
-
|
| 30 |
-
### Products
|
| 31 |
-
- `GET /api/products` - Get all products (requires auth)
|
| 32 |
-
- `POST /api/products` - Create new product (requires auth)
|
| 33 |
-
- `PUT /api/products/:id` - Update product (requires auth)
|
| 34 |
-
- `DELETE /api/products/:id` - Delete product (requires auth)
|
| 35 |
-
|
| 36 |
-
## Environment Variables
|
| 37 |
-
|
| 38 |
-
Set these in your Hugging Face Spaces secrets:
|
| 39 |
-
|
| 40 |
-
- `MONGODB_URI` - Your MongoDB connection string
|
| 41 |
-
- `JWT_SECRET` - Your JWT secret key
|
| 42 |
-
- `EMAIL_USER` - Email for notifications (optional)
|
| 43 |
-
- `EMAIL_PASS` - Email password (optional)
|
| 44 |
-
- `EMAIL_TO` - Admin email for alerts (optional)
|
| 45 |
-
|
| 46 |
-
## Usage
|
| 47 |
-
|
| 48 |
-
The API is now running! You can test it by visiting the root endpoint or use it with the RetroTech Inventory frontend.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package-lock.json
CHANGED
|
@@ -9,7 +9,9 @@
|
|
| 9 |
"version": "1.0.0",
|
| 10 |
"license": "ISC",
|
| 11 |
"dependencies": {
|
|
|
|
| 12 |
"bcryptjs": "^3.0.2",
|
|
|
|
| 13 |
"dotenv": "^17.2.3",
|
| 14 |
"express": "^5.1.0",
|
| 15 |
"jsonwebtoken": "^9.0.2",
|
|
@@ -30,6 +32,44 @@
|
|
| 30 |
"sparse-bitfield": "^3.0.3"
|
| 31 |
}
|
| 32 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
"node_modules/@types/webidl-conversions": {
|
| 34 |
"version": "7.0.3",
|
| 35 |
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
|
|
@@ -72,6 +112,23 @@
|
|
| 72 |
"node": ">= 8"
|
| 73 |
}
|
| 74 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
"node_modules/balanced-match": {
|
| 76 |
"version": "1.0.2",
|
| 77 |
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
|
@@ -223,6 +280,18 @@
|
|
| 223 |
"fsevents": "~2.3.2"
|
| 224 |
}
|
| 225 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 226 |
"node_modules/concat-map": {
|
| 227 |
"version": "0.0.1",
|
| 228 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
@@ -269,6 +338,19 @@
|
|
| 269 |
"node": ">=6.6.0"
|
| 270 |
}
|
| 271 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 272 |
"node_modules/debug": {
|
| 273 |
"version": "4.4.3",
|
| 274 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
|
@@ -286,6 +368,24 @@
|
|
| 286 |
}
|
| 287 |
}
|
| 288 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 289 |
"node_modules/depd": {
|
| 290 |
"version": "2.0.0",
|
| 291 |
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
|
@@ -375,6 +475,21 @@
|
|
| 375 |
"node": ">= 0.4"
|
| 376 |
}
|
| 377 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 378 |
"node_modules/escape-html": {
|
| 379 |
"version": "1.0.3",
|
| 380 |
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
|
@@ -462,6 +577,63 @@
|
|
| 462 |
"node": ">= 0.8"
|
| 463 |
}
|
| 464 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 465 |
"node_modules/forwarded": {
|
| 466 |
"version": "0.2.0",
|
| 467 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
|
@@ -588,6 +760,21 @@
|
|
| 588 |
"url": "https://github.com/sponsors/ljharb"
|
| 589 |
}
|
| 590 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 591 |
"node_modules/hasown": {
|
| 592 |
"version": "2.0.2",
|
| 593 |
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
|
@@ -1046,6 +1233,15 @@
|
|
| 1046 |
"node": ">=0.10.0"
|
| 1047 |
}
|
| 1048 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1049 |
"node_modules/object-inspect": {
|
| 1050 |
"version": "1.13.4",
|
| 1051 |
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
|
|
@@ -1124,6 +1320,12 @@
|
|
| 1124 |
"node": ">= 0.10"
|
| 1125 |
}
|
| 1126 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1127 |
"node_modules/pstree.remy": {
|
| 1128 |
"version": "1.1.8",
|
| 1129 |
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
|
|
|
|
| 9 |
"version": "1.0.0",
|
| 10 |
"license": "ISC",
|
| 11 |
"dependencies": {
|
| 12 |
+
"@sendgrid/mail": "^8.1.6",
|
| 13 |
"bcryptjs": "^3.0.2",
|
| 14 |
+
"cors": "^2.8.5",
|
| 15 |
"dotenv": "^17.2.3",
|
| 16 |
"express": "^5.1.0",
|
| 17 |
"jsonwebtoken": "^9.0.2",
|
|
|
|
| 32 |
"sparse-bitfield": "^3.0.3"
|
| 33 |
}
|
| 34 |
},
|
| 35 |
+
"node_modules/@sendgrid/client": {
|
| 36 |
+
"version": "8.1.6",
|
| 37 |
+
"resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-8.1.6.tgz",
|
| 38 |
+
"integrity": "sha512-/BHu0hqwXNHr2aLhcXU7RmmlVqrdfrbY9KpaNj00KZHlVOVoRxRVrpOCabIB+91ISXJ6+mLM9vpaVUhK6TwBWA==",
|
| 39 |
+
"license": "MIT",
|
| 40 |
+
"dependencies": {
|
| 41 |
+
"@sendgrid/helpers": "^8.0.0",
|
| 42 |
+
"axios": "^1.12.0"
|
| 43 |
+
},
|
| 44 |
+
"engines": {
|
| 45 |
+
"node": ">=12.*"
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
"node_modules/@sendgrid/helpers": {
|
| 49 |
+
"version": "8.0.0",
|
| 50 |
+
"resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-8.0.0.tgz",
|
| 51 |
+
"integrity": "sha512-Ze7WuW2Xzy5GT5WRx+yEv89fsg/pgy3T1E3FS0QEx0/VvRmigMZ5qyVGhJz4SxomegDkzXv/i0aFPpHKN8qdAA==",
|
| 52 |
+
"license": "MIT",
|
| 53 |
+
"dependencies": {
|
| 54 |
+
"deepmerge": "^4.2.2"
|
| 55 |
+
},
|
| 56 |
+
"engines": {
|
| 57 |
+
"node": ">= 12.0.0"
|
| 58 |
+
}
|
| 59 |
+
},
|
| 60 |
+
"node_modules/@sendgrid/mail": {
|
| 61 |
+
"version": "8.1.6",
|
| 62 |
+
"resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-8.1.6.tgz",
|
| 63 |
+
"integrity": "sha512-/ZqxUvKeEztU9drOoPC/8opEPOk+jLlB2q4+xpx6HVLq6aFu3pMpalkTpAQz8XfRfpLp8O25bh6pGPcHDCYpqg==",
|
| 64 |
+
"license": "MIT",
|
| 65 |
+
"dependencies": {
|
| 66 |
+
"@sendgrid/client": "^8.1.5",
|
| 67 |
+
"@sendgrid/helpers": "^8.0.0"
|
| 68 |
+
},
|
| 69 |
+
"engines": {
|
| 70 |
+
"node": ">=12.*"
|
| 71 |
+
}
|
| 72 |
+
},
|
| 73 |
"node_modules/@types/webidl-conversions": {
|
| 74 |
"version": "7.0.3",
|
| 75 |
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
|
|
|
|
| 112 |
"node": ">= 8"
|
| 113 |
}
|
| 114 |
},
|
| 115 |
+
"node_modules/asynckit": {
|
| 116 |
+
"version": "0.4.0",
|
| 117 |
+
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
| 118 |
+
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
| 119 |
+
"license": "MIT"
|
| 120 |
+
},
|
| 121 |
+
"node_modules/axios": {
|
| 122 |
+
"version": "1.12.2",
|
| 123 |
+
"resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
|
| 124 |
+
"integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
|
| 125 |
+
"license": "MIT",
|
| 126 |
+
"dependencies": {
|
| 127 |
+
"follow-redirects": "^1.15.6",
|
| 128 |
+
"form-data": "^4.0.4",
|
| 129 |
+
"proxy-from-env": "^1.1.0"
|
| 130 |
+
}
|
| 131 |
+
},
|
| 132 |
"node_modules/balanced-match": {
|
| 133 |
"version": "1.0.2",
|
| 134 |
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
|
|
|
| 280 |
"fsevents": "~2.3.2"
|
| 281 |
}
|
| 282 |
},
|
| 283 |
+
"node_modules/combined-stream": {
|
| 284 |
+
"version": "1.0.8",
|
| 285 |
+
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
| 286 |
+
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
| 287 |
+
"license": "MIT",
|
| 288 |
+
"dependencies": {
|
| 289 |
+
"delayed-stream": "~1.0.0"
|
| 290 |
+
},
|
| 291 |
+
"engines": {
|
| 292 |
+
"node": ">= 0.8"
|
| 293 |
+
}
|
| 294 |
+
},
|
| 295 |
"node_modules/concat-map": {
|
| 296 |
"version": "0.0.1",
|
| 297 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
|
|
| 338 |
"node": ">=6.6.0"
|
| 339 |
}
|
| 340 |
},
|
| 341 |
+
"node_modules/cors": {
|
| 342 |
+
"version": "2.8.5",
|
| 343 |
+
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
| 344 |
+
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
| 345 |
+
"license": "MIT",
|
| 346 |
+
"dependencies": {
|
| 347 |
+
"object-assign": "^4",
|
| 348 |
+
"vary": "^1"
|
| 349 |
+
},
|
| 350 |
+
"engines": {
|
| 351 |
+
"node": ">= 0.10"
|
| 352 |
+
}
|
| 353 |
+
},
|
| 354 |
"node_modules/debug": {
|
| 355 |
"version": "4.4.3",
|
| 356 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
|
|
|
| 368 |
}
|
| 369 |
}
|
| 370 |
},
|
| 371 |
+
"node_modules/deepmerge": {
|
| 372 |
+
"version": "4.3.1",
|
| 373 |
+
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
|
| 374 |
+
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
|
| 375 |
+
"license": "MIT",
|
| 376 |
+
"engines": {
|
| 377 |
+
"node": ">=0.10.0"
|
| 378 |
+
}
|
| 379 |
+
},
|
| 380 |
+
"node_modules/delayed-stream": {
|
| 381 |
+
"version": "1.0.0",
|
| 382 |
+
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
| 383 |
+
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
| 384 |
+
"license": "MIT",
|
| 385 |
+
"engines": {
|
| 386 |
+
"node": ">=0.4.0"
|
| 387 |
+
}
|
| 388 |
+
},
|
| 389 |
"node_modules/depd": {
|
| 390 |
"version": "2.0.0",
|
| 391 |
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
|
|
|
| 475 |
"node": ">= 0.4"
|
| 476 |
}
|
| 477 |
},
|
| 478 |
+
"node_modules/es-set-tostringtag": {
|
| 479 |
+
"version": "2.1.0",
|
| 480 |
+
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
| 481 |
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
| 482 |
+
"license": "MIT",
|
| 483 |
+
"dependencies": {
|
| 484 |
+
"es-errors": "^1.3.0",
|
| 485 |
+
"get-intrinsic": "^1.2.6",
|
| 486 |
+
"has-tostringtag": "^1.0.2",
|
| 487 |
+
"hasown": "^2.0.2"
|
| 488 |
+
},
|
| 489 |
+
"engines": {
|
| 490 |
+
"node": ">= 0.4"
|
| 491 |
+
}
|
| 492 |
+
},
|
| 493 |
"node_modules/escape-html": {
|
| 494 |
"version": "1.0.3",
|
| 495 |
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
|
|
|
| 577 |
"node": ">= 0.8"
|
| 578 |
}
|
| 579 |
},
|
| 580 |
+
"node_modules/follow-redirects": {
|
| 581 |
+
"version": "1.15.11",
|
| 582 |
+
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
| 583 |
+
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
| 584 |
+
"funding": [
|
| 585 |
+
{
|
| 586 |
+
"type": "individual",
|
| 587 |
+
"url": "https://github.com/sponsors/RubenVerborgh"
|
| 588 |
+
}
|
| 589 |
+
],
|
| 590 |
+
"license": "MIT",
|
| 591 |
+
"engines": {
|
| 592 |
+
"node": ">=4.0"
|
| 593 |
+
},
|
| 594 |
+
"peerDependenciesMeta": {
|
| 595 |
+
"debug": {
|
| 596 |
+
"optional": true
|
| 597 |
+
}
|
| 598 |
+
}
|
| 599 |
+
},
|
| 600 |
+
"node_modules/form-data": {
|
| 601 |
+
"version": "4.0.4",
|
| 602 |
+
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
|
| 603 |
+
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
|
| 604 |
+
"license": "MIT",
|
| 605 |
+
"dependencies": {
|
| 606 |
+
"asynckit": "^0.4.0",
|
| 607 |
+
"combined-stream": "^1.0.8",
|
| 608 |
+
"es-set-tostringtag": "^2.1.0",
|
| 609 |
+
"hasown": "^2.0.2",
|
| 610 |
+
"mime-types": "^2.1.12"
|
| 611 |
+
},
|
| 612 |
+
"engines": {
|
| 613 |
+
"node": ">= 6"
|
| 614 |
+
}
|
| 615 |
+
},
|
| 616 |
+
"node_modules/form-data/node_modules/mime-db": {
|
| 617 |
+
"version": "1.52.0",
|
| 618 |
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
| 619 |
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
| 620 |
+
"license": "MIT",
|
| 621 |
+
"engines": {
|
| 622 |
+
"node": ">= 0.6"
|
| 623 |
+
}
|
| 624 |
+
},
|
| 625 |
+
"node_modules/form-data/node_modules/mime-types": {
|
| 626 |
+
"version": "2.1.35",
|
| 627 |
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
| 628 |
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
| 629 |
+
"license": "MIT",
|
| 630 |
+
"dependencies": {
|
| 631 |
+
"mime-db": "1.52.0"
|
| 632 |
+
},
|
| 633 |
+
"engines": {
|
| 634 |
+
"node": ">= 0.6"
|
| 635 |
+
}
|
| 636 |
+
},
|
| 637 |
"node_modules/forwarded": {
|
| 638 |
"version": "0.2.0",
|
| 639 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
|
|
|
| 760 |
"url": "https://github.com/sponsors/ljharb"
|
| 761 |
}
|
| 762 |
},
|
| 763 |
+
"node_modules/has-tostringtag": {
|
| 764 |
+
"version": "1.0.2",
|
| 765 |
+
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
| 766 |
+
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
| 767 |
+
"license": "MIT",
|
| 768 |
+
"dependencies": {
|
| 769 |
+
"has-symbols": "^1.0.3"
|
| 770 |
+
},
|
| 771 |
+
"engines": {
|
| 772 |
+
"node": ">= 0.4"
|
| 773 |
+
},
|
| 774 |
+
"funding": {
|
| 775 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 776 |
+
}
|
| 777 |
+
},
|
| 778 |
"node_modules/hasown": {
|
| 779 |
"version": "2.0.2",
|
| 780 |
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
|
|
|
| 1233 |
"node": ">=0.10.0"
|
| 1234 |
}
|
| 1235 |
},
|
| 1236 |
+
"node_modules/object-assign": {
|
| 1237 |
+
"version": "4.1.1",
|
| 1238 |
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
| 1239 |
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
| 1240 |
+
"license": "MIT",
|
| 1241 |
+
"engines": {
|
| 1242 |
+
"node": ">=0.10.0"
|
| 1243 |
+
}
|
| 1244 |
+
},
|
| 1245 |
"node_modules/object-inspect": {
|
| 1246 |
"version": "1.13.4",
|
| 1247 |
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
|
|
|
|
| 1320 |
"node": ">= 0.10"
|
| 1321 |
}
|
| 1322 |
},
|
| 1323 |
+
"node_modules/proxy-from-env": {
|
| 1324 |
+
"version": "1.1.0",
|
| 1325 |
+
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
| 1326 |
+
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
| 1327 |
+
"license": "MIT"
|
| 1328 |
+
},
|
| 1329 |
"node_modules/pstree.remy": {
|
| 1330 |
"version": "1.1.8",
|
| 1331 |
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
|
package.json
CHANGED
|
@@ -13,7 +13,9 @@
|
|
| 13 |
"license": "ISC",
|
| 14 |
"description": "",
|
| 15 |
"dependencies": {
|
|
|
|
| 16 |
"bcryptjs": "^3.0.2",
|
|
|
|
| 17 |
"dotenv": "^17.2.3",
|
| 18 |
"express": "^5.1.0",
|
| 19 |
"jsonwebtoken": "^9.0.2",
|
|
|
|
| 13 |
"license": "ISC",
|
| 14 |
"description": "",
|
| 15 |
"dependencies": {
|
| 16 |
+
"@sendgrid/mail": "^8.1.6",
|
| 17 |
"bcryptjs": "^3.0.2",
|
| 18 |
+
"cors": "^2.8.5",
|
| 19 |
"dotenv": "^17.2.3",
|
| 20 |
"express": "^5.1.0",
|
| 21 |
"jsonwebtoken": "^9.0.2",
|