8.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	TimeSafari Daily Notification Plugin API Reference
Author: Matthew Raymer
Version: 2.2.0
Last Updated: 2025-10-08 06:02:45 UTC
Overview
This API reference provides comprehensive documentation for the TimeSafari Daily Notification Plugin, optimized for native-first architecture supporting Android, iOS, and Electron platforms.
Platform Support
- ✅ Android: WorkManager + AlarmManager + SQLite
 - ✅ iOS: BGTaskScheduler + UNUserNotificationCenter + Core Data
 - ✅ Electron: Desktop notifications + SQLite/LocalStorage
 - ❌ Web (PWA): Removed for native-first focus
 
DailyNotificationPlugin Interface
Configuration
configure(options: ConfigureOptions): Promise<void>
Configure the plugin with storage, TTL, and optimization settings.
Parameters:
options.storage:'shared'|'tiered'- Storage modeoptions.ttlSeconds:number- TTL in seconds (default: 1800)options.prefetchLeadMinutes:number- Prefetch lead time (default: 15)options.enableETagSupport:boolean- Enable ETag conditional requestsoptions.enableErrorHandling:boolean- Enable advanced error handlingoptions.enablePerformanceOptimization:boolean- Enable performance optimization
Core Methods
scheduleDailyNotification(options: NotificationOptions): Promise<void>
Schedule a daily notification with content fetching.
Parameters:
options.url:string- Content endpoint URLoptions.time:string- Time in HH:MM formatoptions.title:string- Notification titleoptions.body:string- Notification bodyoptions.sound:boolean- Enable sound (optional)options.retryConfig:RetryConfiguration- Custom retry settings (optional)
getLastNotification(): Promise<NotificationResponse | null>
Get the last scheduled notification.
cancelAllNotifications(): Promise<void>
Cancel all scheduled notifications.
Platform-Specific Methods
Android Only
getExactAlarmStatus(): Promise<ExactAlarmStatus>
Get exact alarm permission and capability status.
requestExactAlarmPermission(): Promise<void>
Request exact alarm permission from user.
openExactAlarmSettings(): Promise<void>
Open exact alarm settings in system preferences.
getRebootRecoveryStatus(): Promise<RecoveryStatus>
Get reboot recovery status and statistics.
Management Methods
maintainRollingWindow(): Promise<void>
Manually trigger rolling window maintenance.
getRollingWindowStats(): Promise<RollingWindowStats>
Get rolling window statistics and status.
Optimization Methods
optimizeDatabase(): Promise<void>
Optimize database performance with indexes and settings.
optimizeMemory(): Promise<void>
Optimize memory usage and perform cleanup.
optimizeBattery(): Promise<void>
Optimize battery usage and background CPU.
Metrics and Monitoring
getPerformanceMetrics(): Promise<PerformanceMetrics>
Get comprehensive performance metrics.
getErrorMetrics(): Promise<ErrorMetrics>
Get error handling metrics and statistics.
getNetworkMetrics(): Promise<NetworkMetrics>
Get network efficiency metrics (ETag support).
getMemoryMetrics(): Promise<MemoryMetrics>
Get memory usage metrics and statistics.
getObjectPoolMetrics(): Promise<ObjectPoolMetrics>
Get object pooling efficiency metrics.
Utility Methods
resetPerformanceMetrics(): Promise<void>
Reset all performance metrics to zero.
resetErrorMetrics(): Promise<void>
Reset error handling metrics.
clearRetryStates(): Promise<void>
Clear all retry states and operations.
cleanExpiredETags(): Promise<void>
Clean expired ETag cache entries.
Data Types
ConfigureOptions
interface ConfigureOptions {
  storage?: 'shared' | 'tiered';
  ttlSeconds?: number;
  prefetchLeadMinutes?: number;
  enableETagSupport?: boolean;
  enableErrorHandling?: boolean;
  enablePerformanceOptimization?: boolean;
  maxRetries?: number;
  baseRetryDelay?: number;
  maxRetryDelay?: number;
  backoffMultiplier?: number;
  memoryWarningThreshold?: number;
  memoryCriticalThreshold?: number;
  objectPoolSize?: number;
  maxObjectPoolSize?: number;
}
NotificationOptions
interface NotificationOptions {
  url: string;
  time: string;
  title: string;
  body: string;
  sound?: boolean;
  retryConfig?: RetryConfiguration;
}
ExactAlarmStatus (Android)
interface ExactAlarmStatus {
  supported: boolean;
  enabled: boolean;
  canSchedule: boolean;
  fallbackWindow: string;
}
PerformanceMetrics
interface PerformanceMetrics {
  overallScore: number;
  databasePerformance: number;
  memoryEfficiency: number;
  batteryEfficiency: number;
  objectPoolEfficiency: number;
  totalDatabaseQueries: number;
  averageMemoryUsage: number;
  objectPoolHits: number;
  backgroundCpuUsage: number;
  totalNetworkRequests: number;
  recommendations: string[];
}
ErrorMetrics
interface ErrorMetrics {
  totalErrors: number;
  networkErrors: number;
  storageErrors: number;
  schedulingErrors: number;
  permissionErrors: number;
  configurationErrors: number;
  systemErrors: number;
  unknownErrors: number;
  cacheHitRatio: number;
}
Error Handling
All methods return promises that reject with descriptive error messages. The plugin includes comprehensive error categorization and retry logic.
Common Error Types
- Network Errors: Connection timeouts, DNS failures
 - Storage Errors: Database corruption, disk full
 - Permission Errors: Missing exact alarm permission
 - Configuration Errors: Invalid parameters, unsupported settings
 - System Errors: Out of memory, platform limitations
 
Platform Differences
Android
- Requires 
SCHEDULE_EXACT_ALARMpermission for precise timing - Falls back to windowed alarms (±10m) if exact permission denied
 - Supports reboot recovery with broadcast receivers
 - Full performance optimization features
 
iOS
- Uses 
BGTaskSchedulerfor background prefetch - Limited to 64 pending notifications
 - Automatic background task management
 - Battery optimization built-in
 
Electron
- Desktop notification support
 - SQLite or LocalStorage fallback
 - Native desktop notification APIs
 - Cross-platform desktop compatibility
 
TimeSafari-Specific Integration Examples
Basic TimeSafari Integration
import { DailyNotification } from '@timesafari/daily-notification-plugin';
import { TimeSafariIntegrationService } from '@timesafari/daily-notification-plugin';
// Initialize TimeSafari integration
const integrationService = TimeSafariIntegrationService.getInstance();
// Configure with TimeSafari-specific settings
await integrationService.initialize({
  activeDid: 'did:example:timesafari-user-123',
  storageAdapter: timeSafariStorageAdapter,
  endorserApiBaseUrl: 'https://endorser.ch/api/v1'
});
// Schedule TimeSafari community notifications
await DailyNotification.scheduleDailyNotification({
  title: 'New Community Update',
  body: 'You have new offers and project updates',
  time: '09:00',
  channel: 'timesafari_community_updates'
});
TimeSafari Community Features
// Fetch community data with rate limiting
const communityService = new TimeSafariCommunityIntegrationService();
await communityService.initialize({
  maxRequestsPerMinute: 30,
  maxRequestsPerHour: 1000,
  basePollingIntervalMs: 300000, // 5 minutes
  adaptivePolling: true
});
// Fetch community data
const bundle = await communityService.fetchCommunityDataWithRateLimit({
  activeDid: 'did:example:timesafari-user-123',
  fetchOffersToPerson: true,
  fetchOffersToProjects: true,
  fetchProjectUpdates: true,
  starredPlanIds: ['plan-1', 'plan-2', 'plan-3']
});
DID-Signed Payloads
// Generate DID-signed notification payloads
const samplePayloads = integrationService.generateSampleDidPayloads();
for (const payload of samplePayloads) {
  // Verify signature
  const isValid = await integrationService.verifyDidSignature(
    JSON.stringify(payload.payload),
    payload.signature
  );
  
  console.log(`Payload ${payload.type} signature valid: ${isValid}`);
}
Privacy-Preserving Storage
// Configure privacy-preserving storage
const storageAdapter = new TimeSafariStorageAdapterImpl(
  nativeStorage, 
  'timesafari_notifications'
);
// Store with TTL and redaction
await storageAdapter.store('community_data', bundle, 3600); // 1 hour TTL
// Get data retention policy
const policy = integrationService.getDataRetentionPolicy();
console.log('Data retention policy:', policy);