Browse Source

enhance: Improve background data fetching plan with TimeSafari insights

- Integrated TimeSafari authentication patterns (DID-based JWT + Passkey JWANT)
- Added batch processing optimization (100ms delays, 10-item batches)
- Enhanced cross-platform logging with database persistence
- Incorporated @capacitor-community/sqlite for unified storage
- Added performance monitoring with operation timing
- Included structured notification patterns and error handling
- Enhanced Android/iOS native implementation strategies
- Expanded success criteria and technical requirements

Based on analysis of TimeSafari crowdsourcing application architecture.
research/notification-plugin-enhancement
Matthew Raymer 19 hours ago
parent
commit
bad3bdda1f
  1. 59
      doc/BACKGROUND_DATA_FETCHING_PLAN.md

59
doc/BACKGROUND_DATA_FETCHING_PLAN.md

@ -2,8 +2,8 @@
**Author**: Matthew Raymer **Author**: Matthew Raymer
**Version**: 1.0.0 **Version**: 1.0.0
**Created**: 2025-01-27 12:00:00 UTC **Created**: 2025-10-02 07:47:04 UTC
**Last Updated**: 2025-01-27 12:00:00 UTC **Last Updated**: 2025-10-02 10:15:00 UTC
## Overview ## Overview
@ -36,12 +36,33 @@ JavaScript Layer → Native Bridge → Native Background Executor
### B. Authentication Implementation ### B. Authentication Implementation
```kotlin ```kotlin
// JWT Generation in Android // JWT Generation in Android - Enhanced with DID support
class JWTHelper { class JWTHelper {
fun generateJWT(userDid: String, expiresInSeconds: Int): String { fun generateJWT(userDid: String, expiresInSeconds: Int): String {
val payload = mapOf( val payload = mapOf(
"exp" to (System.currentTimeMillis() / 1000 + expiresInSeconds), "exp" to (System.currentTimeMillis() / 1000 + expiresInSeconds),
"iat" to (System.currentTimeMillis() / 1000)? "iat" to (System.currentTimeMillis() / 1000),
"iss" to userDid,
// Include DID-specific claims for verification
"aud" to "timesafari.notifications",
"sub" to userDid
)
return signWithDID(payload, userDid)
}
// Enhanced authentication with Passkey support
fun generateJWANT(userDid: String, biometricData: ByteArray): String {
val payload = mapOf(
"exp" to (System.currentTimeMillis() / 1000 + 3600), // 1 hour
"iat" to (System.currentTimeMillis() / 1000),
"iss" to userDid,
"aud" to "timesafari.notifications",
"sub" to userDid,
"auth_data" to android.util.Base64.encodeToString(biometricData, android.util.Base64.NO_WRAP)
)
return signWithDIDPasskey(payload, userDid, biometricData)
}
}
### C. HTTP Request Implementation ### C. HTTP Request Implementation
@ -184,13 +205,27 @@ interface PluginConfig {
- **Android Room database** for caching API responses - **Android Room database** for caching API responses
- **iOS Core Data** for persistent storage - **iOS Core Data** for persistent storage
- **Web IndexedDB** for web platform caching
- **TTL enforcement** for cached data freshness - **TTL enforcement** for cached data freshness
- **SQLite integration** via @capacitor-community/sqlite for unified storage across platforms
### State Synchronization ### State Synchronization
- **JavaScript → Native** configuration updates - **JavaScript → Native** configuration updates
- **Native → JavaScript** status reporting - **Native → JavaScript** status reporting
- **Cross-platform state consistency** - **Cross-platform state consistency**
- **Background ↔ Foreground** state synchronization
- **Database logging** for audit trails and debugging
### Enhanced Caching Strategy
Based on TimeSafari's optimization patterns:
- **Batch-oriented processing** for API requests to reduce overhead
- **Intelligent batching** with configurable timing (max 100ms wait, max 10 items)
- **Memory-optimized caching** with automatic cleanup (keep last 1000 log entries)
- **Request deduplication** to prevent redundant API calls
- **Performance monitoring** with operation timing and metrics collection
## Performance Optimizations ## Performance Optimizations
@ -273,6 +308,8 @@ GET {apiServer}/api/v2/report/offersToPlansOwnedByMe?afterId={jwtId}&beforeId={j
- Generate traditional JWT using DID signing - Generate traditional JWT using DID signing
- Short-lived tokens (60 seconds) - Short-lived tokens (60 seconds)
- Suitable for basic notification data fetching - Suitable for basic notification data fetching
- Use `did-jwt` library for token generation and verification
- Based on TimeSafari's existing JWT implementation patterns
### Option 2: Enhanced Passkey Authentication (Advanced) ### Option 2: Enhanced Passkey Authentication (Advanced)
@ -280,6 +317,8 @@ GET {apiServer}/api/v2/report/offersToPlansOwnedByMe?afterId={jwtId}&beforeId={j
- Longer-lived tokens with automatic refresh - Longer-lived tokens with automatic refresh
- Support for cached authentication state - Support for cached authentication state
- Better user experience for frequent polling - Better user experience for frequent polling
- Integrate with SimpleWebAuthn for cross-platform biometric support
- Support JWANT tokens (JWT + WebAuthn) for enhanced security
## Platform-Specific Considerations ## Platform-Specific Considerations
@ -296,6 +335,9 @@ GET {apiServer}/api/v2/report/offersToPlansOwnedByMe?afterId={jwtId}&beforeId={j
- Support iOS Keychain for authentication tokens - Support iOS Keychain for authentication tokens
- Handle Face ID/Touch ID integration for passkeys - Handle Face ID/Touch ID integration for passkeys
- Support certificate pinning if required - Support certificate pinning if required
- Use BGTaskScheduler for reliable background execution
- Handle iOS-specific background refresh restrictions
- Support Core Data for notification metadata persistence
## Data Flow Integration Points ## Data Flow Integration Points
@ -356,6 +398,10 @@ GET {apiServer}/api/v2/report/offersToPlansOwnedByMe?afterId={jwtId}&beforeId={j
- [ ] **Reliability Requirements**: Handles network failures and offline scenarios - [ ] **Reliability Requirements**: Handles network failures and offline scenarios
- [ ] **Integration Requirements**: Seamless integration with existing plugin APIs - [ ] **Integration Requirements**: Seamless integration with existing plugin APIs
- [ ] **Testing Requirements**: Comprehensive test coverage for all platforms - [ ] **Testing Requirements**: Comprehensive test coverage for all platforms
- [ ] **Authentication Requirements**: Support both DID-based JWT and Passkey JWANT tokens
- [ ] **Optimization Requirements**: Implement batch processing with sub-100ms delays
- [ ] **Logging Requirements**: Structured logging with database persistence for debugging
- [ ] **Cross-Platform Requirements**: Unified SQLite/IndexedDB storage across platforms
## Risks & Mitigation ## Risks & Mitigation
@ -373,6 +419,7 @@ GET {apiServer}/api/v2/report/offersToPlansOwnedByMe?afterId={jwtId}&beforeId={j
--- ---
**Status**: Planning document - Ready for implementation **Status**: Enhanced planning document - Ready for implementation
**Next Steps**: Begin Phase 1 implementation with Android HTTP client setup **Next Steps**: Begin Phase 1 implementation with Android HTTP client setup
**Dependencies**: Android Studio, Xcode, Capacitor CLI, existing plugin infrastructure **Dependencies**: Android Studio, Xcode, Capacitor CLI, existing plugin infrastructure, @capacitor-community/sqlite, @simplewebauthn packages
**Enhanced Features**: DID authentication, batch processing, structured logging, cross-platform storage optimization

Loading…
Cancel
Save