ai-wpa/lib/jwt.ts

48 lines
1.2 KiB
TypeScript

import jwt from 'jsonwebtoken'
const JWT_SECRET = process.env.JWT_SECRET || 'your-jwt-secret-change-in-production'
const JWT_REFRESH_SECRET =
process.env.JWT_REFRESH_SECRET || 'your-jwt-refresh-secret-change-in-production'
export interface TokenPayload {
userId: string
email: string
role: string
}
export const generateTokens = (payload: TokenPayload) => {
const accessToken = jwt.sign(payload, JWT_SECRET, {
expiresIn: '15m', // Short-lived access token
})
const refreshToken = jwt.sign(payload, JWT_REFRESH_SECRET, {
expiresIn: '7d', // Long-lived refresh token
})
return { accessToken, refreshToken }
}
export const verifyAccessToken = (token: string): TokenPayload | null => {
try {
return jwt.verify(token, JWT_SECRET) as TokenPayload
} catch (error) {
return null
}
}
export const verifyRefreshToken = (token: string): TokenPayload | null => {
try {
return jwt.verify(token, JWT_REFRESH_SECRET) as TokenPayload
} catch (error) {
return null
}
}
export const decodeToken = (token: string): TokenPayload | null => {
try {
return jwt.decode(token) as TokenPayload
} catch (error) {
return null
}
}