import jwt, { type SignOptions } from 'jsonwebtoken'; import type { JWTPayload } from '@horux/shared'; import { env } from '../config/env.js'; export function generateAccessToken(payload: Omit): string { const options: SignOptions = { expiresIn: env.JWT_EXPIRES_IN as SignOptions['expiresIn'], }; return jwt.sign(payload, env.JWT_SECRET, options); } export function generateRefreshToken(payload: Omit): string { const options: SignOptions = { expiresIn: env.JWT_REFRESH_EXPIRES_IN as SignOptions['expiresIn'], }; return jwt.sign(payload, env.JWT_SECRET, options); } export function verifyToken(token: string): JWTPayload { return jwt.verify(token, env.JWT_SECRET) as JWTPayload; } export function decodeToken(token: string): JWTPayload | null { try { return jwt.decode(token) as JWTPayload; } catch { return null; } }