mirror of
https://github.com/hanzo-apps/dataroom.git
synced 2026-10-30 14:47:36 +00:00
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import jwt from "jsonwebtoken";
|
|
|
|
const JWT_SECRET = process.env.NEXT_PRIVATE_UNSUBSCRIBE_JWT_SECRET as string;
|
|
|
|
type JWTPayload = {
|
|
[key: string]: any;
|
|
exp?: number; // Expiration timestamp
|
|
};
|
|
|
|
/**
|
|
* Generates a JWT token with the provided payload
|
|
* @param payload The data to encode in the JWT
|
|
* @param expiresInSeconds Optional expiration time in seconds (default: 24 hours)
|
|
* @returns The signed JWT token
|
|
*/
|
|
export function generateJWT(
|
|
payload: JWTPayload,
|
|
expiresInSeconds: number = 60 * 60 * 24, // 24 hours
|
|
): string {
|
|
const tokenPayload = {
|
|
...payload,
|
|
exp: payload.exp || Math.floor(Date.now() / 1000) + expiresInSeconds,
|
|
};
|
|
|
|
return jwt.sign(tokenPayload, JWT_SECRET);
|
|
}
|
|
|
|
/**
|
|
* Verifies a JWT token and returns the decoded payload
|
|
* @param token The JWT token to verify
|
|
* @returns The decoded payload or null if invalid
|
|
*/
|
|
export function verifyJWT<T = JWTPayload>(token: string): T | null {
|
|
try {
|
|
return jwt.verify(token, JWT_SECRET) as T;
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|