4881907c28
JWT-based auth (hono/jwt + bcrypt), anonymous-first flow preserved. Registration requires invite code when REQUIRE_INVITE=true. Admin user seeded on startup (admin/admin, forced password reset). Login accepts email or username. Admin invitations management page in sidebar. Regular users get invite-a-friend button when USER_INVITATIONS > 0. Frontend gate screen blocks game access for unregistered users with invite code entry, registration, login, and password reset flows. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
32 lines
777 B
JSON
32 lines
777 B
JSON
{
|
|
"name": "@ai-tycoon/server",
|
|
"version": "0.0.1",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc",
|
|
"start": "node --import tsx src/index.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:push": "drizzle-kit push"
|
|
},
|
|
"dependencies": {
|
|
"@ai-tycoon/shared": "workspace:*",
|
|
"@hono/node-server": "^1.13.8",
|
|
"bcryptjs": "^3.0.3",
|
|
"drizzle-orm": "^0.44.2",
|
|
"hono": "^4.7.10",
|
|
"postgres": "^3.4.7",
|
|
"uuid": "^11.1.0"
|
|
},
|
|
"devDependencies": {
|
|
"@ai-tycoon/tsconfig": "workspace:*",
|
|
"@types/node": "^25.6.0",
|
|
"drizzle-kit": "^0.31.1",
|
|
"tsx": "^4.19.4",
|
|
"typescript": "^5.8.3"
|
|
}
|
|
}
|