Cleanup: extract constants, fix typecheck, add ESLint, organize store types
- Remove unused initCount state from useAuthGate hook - Replace magic number with MAX_SAVES_PER_USER constant in saves route - Extract duplicated EMAIL_REGEX and MIN_PASSWORD_LENGTH in auth routes - Fix game-simulation typecheck failure by adding DOM lib to tsconfig - Extract store UI types (ActivePage, InfraNav, etc.) to store/types.ts - Fix let→const for non-reassigned arrays in servingPipeline - Fix useless initial assignments in reputationSystem - Fix ambiguous multiline array access in sanityChecks - Add minimal ESLint config with typescript-eslint - Add .planning/ and *.log to .gitignore Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,9 @@ import { createToken } from '../lib/jwt';
|
||||
import { authMiddleware } from '../middleware/auth';
|
||||
import type { AppEnv } from '../types';
|
||||
|
||||
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||
const MIN_PASSWORD_LENGTH = 8;
|
||||
|
||||
const auth = new Hono<AppEnv>();
|
||||
|
||||
auth.post('/anonymous', async (c) => {
|
||||
@@ -27,11 +30,11 @@ auth.post('/register', authMiddleware, async (c) => {
|
||||
inviteCode: string;
|
||||
}>();
|
||||
|
||||
if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
||||
if (!email || !EMAIL_REGEX.test(email)) {
|
||||
return c.json({ error: 'Valid email required' }, 400);
|
||||
}
|
||||
if (!password || password.length < 8) {
|
||||
return c.json({ error: 'Password must be at least 8 characters' }, 400);
|
||||
if (!password || password.length < MIN_PASSWORD_LENGTH) {
|
||||
return c.json({ error: `Password must be at least ${MIN_PASSWORD_LENGTH} characters` }, 400);
|
||||
}
|
||||
|
||||
if (process.env.REQUIRE_INVITE !== 'false') {
|
||||
@@ -117,8 +120,8 @@ auth.post('/change-password', authMiddleware, async (c) => {
|
||||
newPassword: string;
|
||||
}>();
|
||||
|
||||
if (!newPassword || newPassword.length < 8) {
|
||||
return c.json({ error: 'New password must be at least 8 characters' }, 400);
|
||||
if (!newPassword || newPassword.length < MIN_PASSWORD_LENGTH) {
|
||||
return c.json({ error: `New password must be at least ${MIN_PASSWORD_LENGTH} characters` }, 400);
|
||||
}
|
||||
|
||||
if (!user.mustResetPassword) {
|
||||
@@ -193,7 +196,7 @@ auth.post('/change-email', authMiddleware, async (c) => {
|
||||
currentPassword: string;
|
||||
}>();
|
||||
|
||||
if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
||||
if (!email || !EMAIL_REGEX.test(email)) {
|
||||
return c.json({ error: 'Valid email required' }, 400);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ savesRouter.get('/', async (c) => {
|
||||
.from(saves)
|
||||
.where(eq(saves.userId, userId))
|
||||
.orderBy(desc(saves.updatedAt))
|
||||
.limit(10);
|
||||
.limit(MAX_SAVES_PER_USER);
|
||||
|
||||
return c.json({ saves: userSaves });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user