cropintel / src /lib /firebase.ts
Jaithra Polavarapu
feat: add Firebase auth/farms backend alongside existing frontend
fb030a8
Raw
History Blame Contribute Delete
1.68 kB
import { getApp, getApps, initializeApp } from 'firebase/app'
import { getAuth } from 'firebase/auth'
import { getFirestore } from 'firebase/firestore'
import { getStorage } from 'firebase/storage'
const firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
}
const requiredFirebaseConfig = [
['NEXT_PUBLIC_FIREBASE_API_KEY', firebaseConfig.apiKey],
['NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN', firebaseConfig.authDomain],
['NEXT_PUBLIC_FIREBASE_PROJECT_ID', firebaseConfig.projectId],
['NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET', firebaseConfig.storageBucket],
['NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID', firebaseConfig.messagingSenderId],
['NEXT_PUBLIC_FIREBASE_APP_ID', firebaseConfig.appId],
] as const
function getMissingFirebaseConfig() {
return requiredFirebaseConfig
.filter(([, value]) => !value)
.map(([key]) => key)
}
function getFirebaseApp() {
const missingConfig = getMissingFirebaseConfig()
if (missingConfig.length > 0) {
throw new Error(`Firebase is not configured. Missing: ${missingConfig.join(', ')}`)
}
return getApps().length ? getApp() : initializeApp(firebaseConfig)
}
export function getFirebaseAuth() {
return getAuth(getFirebaseApp())
}
export function getFirebaseDb() {
return getFirestore(getFirebaseApp())
}
export function getFirebaseStorage() {
return getStorage(getFirebaseApp())
}