import { SignJWT } from 'jose'; import { randomBytes } from 'node:crypto'; import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto'; export async function createMaintenanceLoginUrl( baseUrl: string, auth: MaintenanceAuthDto, secret: string, ): Promise { return `${baseUrl}/maintenance?token=${await signMaintenanceJwt(secret, auth)}`; } export async function signMaintenanceJwt(secret: string, data: MaintenanceAuthDto): Promise { const alg = 'HS256'; return await new SignJWT({ ...data }) .setProtectedHeader({ alg }) .setIssuedAt() .setExpirationTime('4h') .sign(new TextEncoder().encode(secret)); } export function generateMaintenanceSecret(): string { return randomBytes(64).toString('hex'); }