eletrotupi / tcc / api/src/lib/jwt.ts master
1.0 KB Raw
import jwt from 'jsonwebtoken';
import crypto from 'crypto';

const JWT_SECRET = process.env.JWT_SECRET || 'development-secret-change-in-production';
const JWT_EXPIRES_IN = '7d';
const PASSWORD_RESET_EXPIRES_IN = '1h';

interface TokenPayload {
  userId: number;
  email: string;
}

export const generateToken = (userId: number, email: string): string => {
  const payload: TokenPayload = { userId, email };
  return jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
};

export const verifyToken = (token: string): TokenPayload => {
  return jwt.verify(token, JWT_SECRET) as TokenPayload;
};

export const generatePasswordResetToken = (): string => {
  return [...Array(6)]
    .map(() => crypto.randomInt(100))
    .join(" ");
};

export const getPasswordResetExpiration = (): Date => {
  const expirationTime = new Date();
  expirationTime.setHours(expirationTime.getHours() + 1); // 1 hour from now
  return expirationTime;
};

export const isTokenExpired = (expirationDate: Date): boolean => {
  return new Date() > expirationDate;
};