You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

173 lines
4.7 KiB

/**
* 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
};