Features:
- Batch sending: push_batch/4, push_batch!/4 for concurrent multi-token sending
- Token validation: validate_token/2, valid_token?/2 with APNS/FCM format checks
- Rate limiting: Optional client-side rate limiter with sliding window algorithm
API additions:
- PushX.push_batch/4 - Send to multiple tokens with {:ok/:error, Response} tuples
- PushX.push_batch!/4 - Returns %{success: n, failure: n, total: n} summary
- PushX.validate_token/2 - Returns :ok or {:error, reason}
- PushX.valid_token?/2 - Returns boolean
- PushX.check_rate_limit/1 - Check if under rate limit
- PushX.Token module for token format validation
- PushX.RateLimiter GenServer for rate tracking
- APNS.send_batch/3 and FCM.send_batch/3 for direct batch sending
Configuration:
- :batch_concurrency - Default concurrent requests (default: 50)
- :rate_limit_enabled - Enable rate limiting (default: false)
- :rate_limit_apns/:rate_limit_fcm - Per-provider limits
- :rate_limit_window_ms - Sliding window duration
Tests: 161 tests, 0 failures