5a3dc15704
The 2500ms timer that drifts CallState from `ended` back to `idle` was an inline magic number. Promote to a module-level constant with a comment explaining why the value isn't arbitrary — picked from the post-Phase-3 quality review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
apps/mobile/lib
App-local helpers that depend on Expo / React Native APIs and therefore cannot live in packages/shared.
Expected contents:
secureStorage.ts— thin adapter overexpo-secure-store, exposes get/set/delete that@chat-app/shared/authconsumes.sqlite.ts— opens the encrypted local message DB viaexpo-sqlite, exposes a migration runner.push.ts— wiresexpo-notifications+ registers FCM/APNs token with Supabase.sodium.ts— bindsreact-native-libsodiumto the backend interface expected by@chat-app/shared/crypto.