eletrotupi / tcc/ api/src/lib/jwt.tse1b36f7e39e375953e4e199680dd3f36adca4939
1.0 KB | 38 lines Raw
1
import jwt from 'jsonwebtoken';
2
import crypto from 'crypto';
3

4
const JWT_SECRET = process.env.JWT_SECRET;
5

6
if (!JWT_SECRET) {
7
  throw new Error('JWT_SECRET is not set');
8
}
9

10
const JWT_EXPIRES_IN = '7d';
11

12
interface TokenPayload {
13
  userId: number;
14
  email: string;
15
}
16

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

22
export const verifyToken = (token: string): TokenPayload => {
23
  return jwt.verify(token, JWT_SECRET, { algorithms: ['HS256'] }) as TokenPayload;
24
};
25

26
export const generatePasswordResetToken = (): string => {
27
  return crypto.randomBytes(32).toString('hex');
28
};
29

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

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