import QRCode from "qrcode"; import { randomBytes } from "crypto"; import { getParametres } from "./parametresDb"; /** * Générer un token unique pour le QR code */ export function generateQRToken(): string { return randomBytes(32).toString("hex"); } /** * Générer un QR code en base64 à partir d'un token * @param token Le token unique de la séquence * @returns Une image QR code en base64 (data URL) */ export async function generateQRCodeDataURL(token: string): Promise { // URL complète pour scanner le QR code const parametres = await getParametres(); const url = `${parametres.urlPublique}/emargement/${token}`; try { const qrCodeDataURL = await QRCode.toDataURL(url, { errorCorrectionLevel: "H", type: "image/png", width: 400, margin: 2, color: { dark: "#000000", light: "#FFFFFF", }, }); return qrCodeDataURL; } catch (error) { console.error("Erreur lors de la génération du QR code:", error); throw new Error("Impossible de générer le QR code"); } } /** * Générer un QR code en buffer PNG * @param token Le token unique de la séquence * @returns Un buffer PNG du QR code */ export async function generateQRCodeBuffer(token: string): Promise { const parametres = await getParametres(); const url = `${parametres.urlPublique}/emargement/${token}`; try { const buffer = await QRCode.toBuffer(url, { errorCorrectionLevel: "H", type: "png", width: 400, margin: 2, }); return buffer; } catch (error) { console.error("Erreur lors de la génération du QR code:", error); throw new Error("Impossible de générer le QR code"); } }