import jwt from 'jsonwebtoken'; import { JWT_AUDIENCE, JWT_ISSUER, JWT_SECRET } from '../constants/env'; export interface TokenProps { aud?: string; exp?: number | Date; iss?: string; sub: string | null; [key: string]: any; } export type SignProps = string | TokenProps | void; export const sign = (props: SignProps) => { const today = new Date(); const { sub = null, ...rest }: TokenProps = typeof props === 'string' || typeof props === 'undefined' ? { sub: props || null } : props; let { exp } = rest; if (!exp) { exp = new Date(today); exp.setDate(today.getDate() + parseInt(process.env.JWT_DAYS_VALID as string)); exp = exp.getTime() / 1000; } return jwt.sign( { exp, sub, aud: rest.aud || JWT_AUDIENCE, iat: today.getTime(), iss: rest.iss || JWT_ISSUER, }, JWT_SECRET, ); }; export const verify = (token: string) => jwt.verify(token, JWT_SECRET);