import cron from 'node-cron'; import { TokenManager } from './services/token_manager'; import { AnalyticsService } from './services/analytics'; import { purgeOldMedia } from './services/media-purge'; import { tiktokService } from './services/tiktok'; export function startTokenCron() { // Toutes les 2 minutes — suivi des publications TikTok (API asynchrone) cron.schedule('*/2 * * * *', async () => { try { await tiktokService.syncPendingPublications(); } catch (error) { console.error('[Cron] TikTok publish status sync failed:', error); } }); console.log('[Cron] TikTok publish status job scheduled (*/2 * * * *).'); // Run every day at midnight (00:00) — Token health check cron.schedule('0 0 * * *', async () => { console.log('[Cron] Running daily token check...'); await TokenManager.checkAndRefreshTokens(); }); console.log('[Cron] Token refresh job scheduled (0 0 * * *).'); // Run twice daily (08:00 and 20:00) — Analytics sync for all pages cron.schedule('0 8,20 * * *', async () => { console.log('[Cron] Running analytics sync for all pages...'); try { await AnalyticsService.syncAllPages(); } catch (error) { console.error('[Cron] Analytics sync failed:', error); } }); console.log('[Cron] Analytics sync job scheduled (0 8,20 * * *).'); // Run every day at 03:00 AM — Cleanup old media from Cloudinary and DB cron.schedule('0 3 * * *', async () => { console.log('[Cron] Running daily media purge check...'); try { await purgeOldMedia(); } catch (error) { console.error('[Cron] Media purge check failed:', error); } }); console.log('[Cron] Media purge job scheduled (0 3 * * *).'); }