Files
llink/js/mobile/src/firebase.ts
Arjun PatelandGitHub a8a0b7db1b infra: add linting and formatting for js projects (#230)
* wip

* wip

* wip

* format

* wip(mobile): lint and format

* cleanup

* nits

* nits

* idiomatic react

* nit

* format all root files
2026-06-02 07:44:24 -07:00

31 lines
1.4 KiB
TypeScript

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,
});