feat(frontend): integrate connected app flows - #137
Conversation
| * an error and the reporter skips that tick. | ||
| */ | ||
| export function createLocationProvider(): LocationProvider { | ||
| return Platform.OS === 'web' ? new BrowserLocationProvider() : new ExpoLocationProvider(); |
There was a problem hiding this comment.
[high] The default native path always constructs ExpoLocationProvider, but frontend/package.json and frontend/package-lock.json do not include expo-location or a config plugin for it. In the app composition root no provider is injected, so requireOptionalNativeModule("ExpoLocation") resolves to null and every native location tick fails; location schedules never report coordinates in the default Android/iOS builds. Add and configure expo-location, or inject a real provider before enabling this integration.
There was a problem hiding this comment.
Fixed in cee694e. expo-location ~57.0.7 is now a direct dependency and configured in app.json; the default provider imports the public expo-location module directly instead of optional native lookup. All 200 tests pass.
| ); | ||
| } | ||
|
|
||
| const currentPermission = await location.getForegroundPermissionsAsync?.(); |
There was a problem hiding this comment.
[high] Even after linking expo-location, this default provider only requests foreground permission and uses getCurrentPositionAsync from a JavaScript interval. The app config now advertises background location and the feature is used for location reminders, but no background task/geofence provider is registered, so polling stops when the app is backgrounded or suspended and reminders cannot trigger reliably. The default implementation needs a real background-capable provider (or the app must not claim background location support).
There was a problem hiding this comment.
Fixed in cee694e using the foreground-only option described in the review. Removed iOS background mode/always permission and Android background/foreground-location-service permissions, and the integration now stops reporting whenever AppState is not active. All 200 tests pass.
| } | ||
|
|
||
| const application = AndroidConfig.Manifest.getMainApplicationOrThrow(manifest); | ||
| application.$['android:usesCleartextTraffic'] = 'true'; |
There was a problem hiding this comment.
[high] This sets android:usesCleartextTraffic="true" for every generated Android build, including release. That globally permits ws:///HTTP traffic and can silently send the device ID and schedule/voice data without transport encryption if the endpoint is misconfigured. Restrict cleartext to development via a network-security config/build variant, and enforce wss:// for release builds.
Resolve app integration conflicts by keeping the connected shell, merging MVP env/map calendar additions, and aligning fake transport contracts with production request correlation. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Dependency