/** * Phase 1.2 TTL-at-Fire Enforcement Usage Example * * Demonstrates TTL enforcement functionality * Shows how stale notifications are automatically skipped * * @author Matthew Raymer * @version 1.0.0 */ import { DailyNotification } from '@timesafari/daily-notification-plugin'; /** * Example: Configure TTL enforcement */ async function configureTTLEnforcement() { try { console.log('Configuring TTL enforcement...'); // Configure with TTL settings await DailyNotification.configure({ storage: 'shared', ttlSeconds: 1800, // 30 minutes TTL prefetchLeadMinutes: 15 }); console.log('✅ TTL enforcement configured (30 minutes)'); // Now the plugin will automatically skip notifications with stale content // Content older than 30 minutes at fire time will not be armed } catch (error) { console.error('❌ TTL configuration failed:', error); } } /** * Example: Schedule notification with TTL enforcement */ async function scheduleWithTTLEnforcement() { try { // Configure TTL enforcement first await configureTTLEnforcement(); // Schedule a notification await DailyNotification.scheduleDailyNotification({ url: 'https://api.example.com/daily-content', time: '09:00', title: 'Daily Update', body: 'Your daily notification is ready', sound: true }); console.log('✅ Notification scheduled with TTL enforcement'); // The plugin will now: // 1. Check content freshness before arming // 2. Skip notifications with stale content // 3. Log TTL violations for debugging // 4. Store violation statistics } catch (error) { console.error('❌ Scheduling with TTL enforcement failed:', error); } } /** * Example: Demonstrate TTL violation scenario */ async function demonstrateTTLViolation() { try { console.log('Demonstrating TTL violation scenario...'); // Configure with short TTL for demonstration await DailyNotification.configure({ storage: 'shared', ttlSeconds: 300, // 5 minutes TTL (very short for demo) prefetchLeadMinutes: 2 }); // Schedule notification await DailyNotification.scheduleDailyNotification({ url: 'https://api.example.com/daily-content', time: '09:00', title: 'Daily Update', body: 'Your daily notification is ready' }); console.log('✅ Notification scheduled with 5-minute TTL'); // If content is fetched more than 5 minutes before 09:00, // the notification will be skipped due to TTL violation console.log('ℹ️ If content is older than 5 minutes at 09:00, notification will be skipped'); } catch (error) { console.error('❌ TTL violation demonstration failed:', error); } } /** * Example: Check TTL violation statistics */ async function checkTTLStats() { try { console.log('Checking TTL violation statistics...'); // Configure TTL enforcement await DailyNotification.configure({ storage: 'shared', ttlSeconds: 1800, // 30 minutes prefetchLeadMinutes: 15 }); // The plugin automatically tracks TTL violations // You can check the logs for TTL_VIOLATION entries // or implement a method to retrieve violation statistics console.log('✅ TTL enforcement active - violations will be logged'); console.log('ℹ️ Check logs for "TTL_VIOLATION" entries'); } catch (error) { console.error('❌ TTL stats check failed:', error); } } /** * Example: Different TTL configurations for different use cases */ async function configureDifferentTTLScenarios() { try { console.log('Configuring different TTL scenarios...'); // Scenario 1: Real-time notifications (short TTL) await DailyNotification.configure({ storage: 'shared', ttlSeconds: 300, // 5 minutes prefetchLeadMinutes: 2 }); console.log('✅ Real-time notifications: 5-minute TTL'); // Scenario 2: Daily digest (longer TTL) await DailyNotification.configure({ storage: 'shared', ttlSeconds: 7200, // 2 hours prefetchLeadMinutes: 30 }); console.log('✅ Daily digest: 2-hour TTL'); // Scenario 3: Weekly summary (very long TTL) await DailyNotification.configure({ storage: 'shared', ttlSeconds: 86400, // 24 hours prefetchLeadMinutes: 60 }); console.log('✅ Weekly summary: 24-hour TTL'); } catch (error) { console.error('❌ TTL scenario configuration failed:', error); } } // Export examples for use export { configureTTLEnforcement, scheduleWithTTLEnforcement, demonstrateTTLViolation, checkTTLStats, configureDifferentTTLScenarios };