import jwt from 'jsonwebtoken'; const JWT_SECRET = process.env.JWT_SECRET || 'supersecret'; export interface TokenPayload { userId: string; email: string; role: string; } /** * Generate an access token (short-lived) */ export function generateAccessToken(payload: TokenPayload): string { return jwt.sign(payload, JWT_SECRET, { expiresIn: '15m', }); } /** * Generate a refresh token (long-lived) */ export function generateRefreshToken(payload: TokenPayload): string { return jwt.sign(payload, JWT_SECRET, { expiresIn: '7d', }); } /** * Verify and decode a token */ export function verifyToken(token: string): TokenPayload { try { return jwt.verify(token, JWT_SECRET) as TokenPayload; } catch (error) { throw new Error('Invalid or expired token'); } }