Backend: - Add configurable draw cycle settings (minutes/hourly/daily/weekly/custom) - Add CYCLE_TYPE, CYCLE_INTERVAL_*, CYCLE_DAILY_TIME, CYCLE_WEEKLY_* env vars - Add SALES_CLOSE_BEFORE_DRAW_MINUTES and CYCLES_TO_GENERATE_AHEAD - Fix SQLite parameter issue in scheduler Frontend: - Add 'Save This Link' section with copy button on ticket status page - Improve draw animation to show immediately when draw starts - Show 'Waiting for next round...' instead of 'Drawing Now!' after draw - Hide Buy Tickets button when waiting for next round - Skip draw animation if no tickets were sold - Keep winner screen open longer (15s) for next cycle to load - Auto-refresh to next lottery cycle after draw Telegram Bot: - Various improvements and fixes
29 lines
602 B
TypeScript
29 lines
602 B
TypeScript
import QRCode from 'qrcode';
|
|
import { logger } from './logger';
|
|
|
|
/**
|
|
* Generate a QR code as a buffer from a Lightning invoice
|
|
*/
|
|
export async function generateQRCode(data: string): Promise<Buffer> {
|
|
try {
|
|
const buffer = await QRCode.toBuffer(data.toUpperCase(), {
|
|
errorCorrectionLevel: 'M',
|
|
type: 'png',
|
|
margin: 2,
|
|
width: 300,
|
|
color: {
|
|
dark: '#000000',
|
|
light: '#FFFFFF',
|
|
},
|
|
});
|
|
return buffer;
|
|
} catch (error) {
|
|
logger.error('Failed to generate QR code', { error });
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
export default { generateQRCode };
|
|
|
|
|