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