/** * Converts schedule options to a cron expression */ export function convertScheduleOptionsToCron( scheduleType: string, options: Record ): string { switch (scheduleType) { case 'minutes': { const interval = options.minutesInterval || '15' // For example, if options.minutesStartingAt is provided, use that as the start minute. return `*/${interval} * * * *` } case 'hourly': { // When scheduling hourly, take the specified minute offset return `${options.hourlyMinute || '00'} * * * *` } case 'daily': { // Expected dailyTime in HH:MM const [minute, hour] = (options.dailyTime || '00:09').split(':') return `${minute || '00'} ${hour || '09'} * * *` } case 'weekly': { // Expected weeklyDay as MON, TUE, etc. and weeklyDayTime in HH:MM const dayMap: Record = { MON: 1, TUE: 2, WED: 3, THU: 4, FRI: 5, SAT: 6, SUN: 0, } const day = dayMap[options.weeklyDay || 'MON'] const [minute, hour] = (options.weeklyDayTime || '00:09').split(':') return `${minute || '00'} ${hour || '09'} * * ${day}` } case 'monthly': { // Expected monthlyDay and monthlyTime in HH:MM const day = options.monthlyDay || '1' const [minute, hour] = (options.monthlyTime || '00:09').split(':') return `${minute || '00'} ${hour || '09'} ${day} * *` } case 'custom': { // Use the provided cron expression directly return options.cronExpression } default: throw new Error('Unsupported schedule type') } }