- Forgot password answers the same (message, status, timing) for every email; the reset link is made and sent after the answer. Rate-limited like sign-in. - Sign-in with an unknown email is refused exactly like a wrong password, after a password check against a stand-in hash. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ls1vMdg2GYqbnKZmPaX1ot
80 lines
2.4 KiB
JSON
80 lines
2.4 KiB
JSON
{
|
|
"name": "event-management-backend",
|
|
"version": "1.51.17",
|
|
"description": "Event Management System Backend",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "tsx watch src/index.js",
|
|
"test": "jest",
|
|
"postinstall": "prisma generate",
|
|
"prisma:generate": "prisma generate",
|
|
"prisma:deploy": "prisma migrate deploy && prisma generate",
|
|
"prisma:status": "prisma migrate status",
|
|
"prisma:reset": "prisma migrate reset --force",
|
|
"migrate:env-to-db": "node scripts/migrate-env-to-db.js",
|
|
"migrate:env-to-db:dry": "node scripts/migrate-env-to-db.js --dry-run",
|
|
"set-demo": "node scripts/set-demo.js",
|
|
"build": "tsc -p tsconfig.json && node -e \"require('fs').writeFileSync('dist/build.json', JSON.stringify({ version: require('./package.json').version, builtAt: new Date().toISOString() }))\"",
|
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
"openapi": "tsx scripts/openapi.ts"
|
|
},
|
|
"dependencies": {
|
|
"@cj-tech-master/excelts": "^10.2.0",
|
|
"@prisma/adapter-pg": "^7.10.1",
|
|
"@prisma/client": "^7.10.1",
|
|
"@sentry/node": "^10.71.0",
|
|
"axios": "^1.11.0",
|
|
"bcryptjs": "^2.4.3",
|
|
"cors": "^2.8.5",
|
|
"cron-parser": "^5.10.2",
|
|
"dotenv": "^16.3.1",
|
|
"express": "^5.3.0",
|
|
"express-rate-limit": "^8.6.2",
|
|
"ics": "^3.12.0",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"multer": "^2.5.0",
|
|
"node-fetch": "^2.7.0",
|
|
"nodemailer": "^10.3.0",
|
|
"pdfkit": "^0.17.1",
|
|
"pg-boss": "^11.1.2",
|
|
"qrcode": "^1.5.4",
|
|
"raw-body": "^3.0.0",
|
|
"swagger-ui-dist": "^5.34.0",
|
|
"tsx": "^4.23.15",
|
|
"typescript": "^5.9.3",
|
|
"uuid": "^11.1.1",
|
|
"zod": "^4.6.7"
|
|
},
|
|
"devDependencies": {
|
|
"@types/express": "^5.0.6",
|
|
"@types/jest": "^30.0.0",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/node": "^20.19.43",
|
|
"@types/supertest": "^7.2.1",
|
|
"@types/swagger-ui-dist": "^3.30.6",
|
|
"jest": "^30.4.2",
|
|
"prisma": "^7.10.1",
|
|
"supertest": "^7.3.1",
|
|
"ts-jest": "^29.4.15"
|
|
},
|
|
"overrides": {
|
|
"uuid": "^11.1.1",
|
|
"@istanbuljs/load-nyc-config": {
|
|
"js-yaml": "^4.1.1"
|
|
},
|
|
"follow-redirects": "^1.16.1"
|
|
},
|
|
"allowScripts": {
|
|
"prisma@7.10.1": true,
|
|
"@prisma/engines@7.10.1": true,
|
|
"unrs-resolver@1.12.2": true,
|
|
"@parcel/watcher": false,
|
|
"@scarf/scarf": false,
|
|
"esbuild": false
|
|
},
|
|
"engines": {
|
|
"node": ">=22"
|
|
}
|
|
}
|