Auth (hand-built on the auth core): - 2FA: User model gains two_factor_secret/recovery_codes/confirmed_at (+ idempotent MariaDB migration). authorize() requires a valid TOTP code when 2FA is confirmed (secret decrypted via Laravel APP_KEY, fail-closed). Two-step login (precheckLogin reveals the code field). /settings/2fa enable/confirm/disable flow. - Password reset: nodemailer email service; PasswordReset model + migration; /forgot (request, generic response) + /reset (token sha256 + 1h TTL, sets argon2id hash). Login links to forgot. Batch 7 (parallel agents): /admin/commandocentrum (RCON controls + emulator_errors), social write actions (friend request + guild forum new thread), /help/[category], /badges (public). env: APP_KEY, APP_URL, SMTP_*. Nav extended. Verified: tsc exit 0, vitest 48/48, next build exit 0 (64 page routes).
45 lines
1.2 KiB
JSON
45 lines
1.2 KiB
JSON
{
|
|
"name": "atomcms-next",
|
|
"private": true,
|
|
"type": "module",
|
|
"engines": { "node": ">=22" },
|
|
"packageManager": "[email protected]",
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"prisma:generate": "prisma generate",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"db:migrate": "tsx scripts/apply-migrations.ts",
|
|
"db:migrate:status": "tsx scripts/apply-migrations.ts --status"
|
|
},
|
|
"dependencies": {
|
|
"@prisma/adapter-mariadb": "^7.8.0",
|
|
"@prisma/client": "^7.8.0",
|
|
"bcryptjs": "^3.0.2",
|
|
"hash-wasm": "^4.12.0",
|
|
"nodemailer": "^6.9.0",
|
|
"next": "^16.2.9",
|
|
"next-auth": "5.0.0-beta.31",
|
|
"otplib": "^12.0.1",
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"zod": "^3.24.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.10.0",
|
|
"@types/nodemailer": "^6.4.0",
|
|
"@types/react": "^19.2.0",
|
|
"@types/react-dom": "^19.2.0",
|
|
"dotenv": "^16.4.0",
|
|
"prisma": "^7.8.0",
|
|
"tsx": "^4.19.0",
|
|
"typescript": "^5.7.0",
|
|
"vitest": "^2.1.0"
|
|
},
|
|
"pnpm": {
|
|
"onlyBuiltDependencies": ["esbuild", "prisma", "@prisma/client", "@prisma/engines"]
|
|
}
|
|
}
|