import { Context, Next } from 'hono'; import { AuthService } from '../services'; import { UserService } from '@d8d/user-module'; import { AppDataSource } from '@d8d/shared-utils'; import { AuthContext } from '@d8d/shared-types'; import { parseWithAwait } from '@d8d/shared-utils'; import { UserSchema } from '@d8d/user-module'; export async function authMiddleware(c: Context, next: Next) { try { const authHeader = c.req.header('Authorization'); if (!authHeader) { return c.json({ message: 'Authorization header missing' }, 401); } const tokenParts = authHeader.split(' '); if (tokenParts.length !== 2 || tokenParts[0] !== 'Bearer') { return c.json({ message: 'Authorization header missing' }, 401); } const token = tokenParts[1]; if (!token) { return c.json({ message: 'Token missing' }, 401); } const userService = new UserService(AppDataSource); const authService = new AuthService(userService); const decoded = authService.verifyToken(token); const user = await userService.getUserById(decoded.id); if (!user) { return c.json({ message: 'User not found' }, 401); } c.set('user', await parseWithAwait(UserSchema, user)); c.set('token', token); await next(); } catch (error) { console.error('Authentication error:', error); return c.json({ message: 'Invalid token' }, 401); } }