Commit Graph

7 Commits

Author SHA1 Message Date
Matthew Raymer
13905db3e4 feat(etag): implement Phase 3.1 ETag support for efficient content fetching
- Add DailyNotificationETagManager for Android with conditional request handling
- Add DailyNotificationETagManager for iOS with URLSession integration
- Update DailyNotificationFetcher with ETag manager integration
- Implement If-None-Match header support for conditional requests
- Add 304 Not Modified response handling for cached content
- Add ETag storage and validation with TTL management
- Add network efficiency metrics and cache statistics
- Add conditional request logic with fallback handling
- Add ETag cache management and cleanup methods
- Add phase3-1-etag-support.ts usage examples

This implements Phase 3.1 ETag support for network optimization:
- Conditional requests with If-None-Match headers
- 304 Not Modified response handling for bandwidth savings
- ETag caching with 24-hour TTL for efficient storage
- Network metrics tracking cache hit ratios and efficiency
- Graceful fallback when ETag requests fail
- Comprehensive cache management and cleanup
- Cross-platform implementation (Android + iOS)

Files: 4 changed, 800+ insertions(+)
2025-09-09 03:19:54 +00:00
Matthew Raymer
69aca905e1 feat(android): implement Phase 2.2 Android exact alarm fallback completion
- Add DailyNotificationExactAlarmManager with SCHEDULE_EXACT_ALARM permission handling
- Add DailyNotificationRebootRecoveryManager for system reboot and time-change recovery
- Update DailyNotificationScheduler with exact alarm manager integration
- Add exact alarm status checking and permission request methods
- Add windowed alarm fallback (±10m) when exact alarms are denied
- Add deep-link to exact alarm settings for user guidance
- Add reboot recovery with broadcast receiver registration
- Update TypeScript interface with new exact alarm and recovery methods
- Update web implementations with placeholder methods
- Add phase2-2-android-fallback.ts usage examples

This completes Phase 2.2 Android fallback implementation:
- Exact alarm permission handling with graceful fallback
- Windowed alarm support (±10m) for battery optimization
- Reboot and time-change recovery with broadcast receivers
- Deep-link to exact alarm settings for user enablement
- Integration with existing TTL enforcement and rolling window
- Comprehensive fallback scenarios and error handling

Files: 7 changed, 1200+ insertions(+)
2025-09-08 10:36:58 +00:00
Matthew Raymer
5eebae9556 feat(ios): implement Phase 2.1 iOS background tasks with T–lead prefetch
- Add DailyNotificationBackgroundTaskManager with BGTaskScheduler integration
- Add DailyNotificationTTLEnforcer for iOS freshness validation
- Add DailyNotificationRollingWindow for iOS capacity management
- Add DailyNotificationDatabase with SQLite schema and WAL mode
- Add NotificationContent data structure for iOS
- Update DailyNotificationPlugin with background task integration
- Add phase2-1-ios-background-tasks.ts usage examples

This implements the critical Phase 2.1 iOS background execution:
- BGTaskScheduler integration for T–lead prefetch
- Single-attempt prefetch with 12s timeout
- ETag/304 caching support for efficient content updates
- Background execution constraints handling
- Integration with existing TTL enforcement and rolling window
- iOS-specific capacity limits and notification management

Files: 7 changed, 2088 insertions(+), 299 deletions(-)
2025-09-08 10:30:13 +00:00
Matthew Raymer
01c1c0f30b feat(android): implement Phase 1.3 rolling window safety
- Add DailyNotificationRollingWindow with capacity-aware scheduling
- Implement iOS capacity limits (64 pending, 20 daily) vs Android (100, 50)
- Add automatic window maintenance every 15 minutes
- Add manual maintenance triggers and statistics API
- Integrate rolling window with TTL enforcer and scheduler
- Add comprehensive unit tests for rolling window functionality
- Add rolling window methods to TypeScript interface
- Add phase1-3-rolling-window.ts usage examples

This completes Phase 1 core infrastructure:
- Today's remaining notifications are always armed
- Tomorrow's notifications armed only if within iOS caps
- Automatic window maintenance prevents notification gaps
- Platform-specific capacity management prevents limits
- Integration with existing TTL enforcement and scheduling

Files: 7 changed, 928 insertions(+)
2025-09-08 10:22:12 +00:00
Matthew Raymer
de6331aabd feat(android): implement Phase 1.2 TTL-at-fire enforcement
- Add DailyNotificationTTLEnforcer with freshness validation logic
- Add TTL validation to scheduling path before arming notifications
- Implement skip rule: if (T - fetchedAt) > ttlSeconds → skip arming
- Add TTL violation logging with TTL_VIOLATION code
- Add comprehensive unit tests for TTL enforcement
- Add TTL enforcer integration to DailyNotificationPlugin
- Add phase1-2-ttl-enforcement.ts usage examples

This implements the critical Phase 1.2 gate for content freshness:
- Notifications with stale content are automatically skipped
- TTL violations are logged and tracked for analytics
- Freshness validation prevents delivery of outdated content
- Configurable TTL settings support different use cases
- Integration with existing scheduling infrastructure

Files: 5 changed, 878 insertions(+)
2025-09-08 09:58:15 +00:00
Matthew Raymer
489dd4ac28 feat(android): implement Phase 1.1 SQLite database sharing with WAL mode
- Add DailyNotificationDatabase.java with three-table schema and WAL configuration
- Add DailyNotificationMigration.java for SharedPreferences to SQLite migration
- Add DailyNotificationDatabaseTest.java with comprehensive unit tests
- Add ConfigureOptions interface with dbPath, storage mode, and TTL settings
- Add configure() method to DailyNotificationPlugin interface
- Update Android plugin with SQLite integration and automatic migration
- Update web implementations to implement new configure() method
- Add phase1-sqlite-usage.ts example demonstrating shared storage configuration

This implements the critical Phase 1.1 gate for shared SQLite storage:
- App and plugin can open the same SQLite file with WAL mode
- Automatic migration from SharedPreferences preserves existing data
- Schema version checking prevents compatibility issues
- Concurrent reads during background writes enabled
- Configuration API supports both shared and tiered storage modes

Files: 8 changed, 1204 insertions(+)
2025-09-08 09:49:08 +00:00
Matthew Raymer
71e0f297ff refactor: improve build configuration and code organization
- Add build scripts for Android and iOS platforms
- Remove duplicate web implementation (src/web.ts)
- Add proper TypeScript configuration
- Add module documentation to index.ts
- Clean up package.json scripts

This commit improves the project structure and build process by:
1. Adding dedicated build scripts for native platforms
2. Removing redundant web implementation
3. Adding proper TypeScript configuration with strict mode
4. Improving code documentation
5. Organizing package.json scripts

The changes maintain backward compatibility while improving
the development experience and code quality.
2025-03-25 13:13:55 +00:00