import { initializeApp } from "firebase/app"; import { initializeAuth, // `getReactNativePersistence` is documented Firebase RN setup but Firebase // intentionally omits it from `firebase/auth`'s public type bundle (it // would pollute web autocomplete). The runtime export exists on every // platform; this is the workaround the Firebase docs themselves use. // @ts-expect-error — RN-only symbol missing from public Firebase types. getReactNativePersistence, } from "firebase/auth"; import { initializeFirestore } from "firebase/firestore"; import AsyncStorage from "@react-native-async-storage/async-storage"; import { appConfig } from "@/config/env"; export const firebaseApp = initializeApp(appConfig.firebase); // AsyncStorage persists the Firebase auth token across cold starts. Without // it, the user would have to re-sign-in to Firestore every launch even though // the Orion bearer token is in SecureStore. export const firebaseAuth = initializeAuth(firebaseApp, { persistence: getReactNativePersistence(AsyncStorage), }); // Firestore's default WebChannel transport often fails on cellular networks // and behind aggressive proxies on iOS. Long-polling is the documented // remedy for React Native and is also what the Firebase team recommends // for mobile apps using the JS SDK. export const firestoreDb = initializeFirestore(firebaseApp, { experimentalAutoDetectLongPolling: true, });