VibeCheckApp.v2 / src /lib /firebase.ts
embedingHF's picture
Upload folder using huggingface_hub
99196c0 verified
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
import { initializeApp } from 'firebase/app';
import { getAuth } from 'firebase/auth';
import { initializeFirestore, doc, getDocFromServer } from 'firebase/firestore';
import firebaseConfig from '../../firebase-applet-config.json';
import { OperationType, FirestoreErrorInfo } from '../types';
// Initialize the Firebase SDK
const app = initializeApp(firebaseConfig);
// CRITICAL: The app will break without providing the firestoreDatabaseId
export const db = initializeFirestore(app, {
experimentalForceLongPolling: true,
}, firebaseConfig.firestoreDatabaseId);
export const auth = getAuth();
/**
* Handle Firestore security and operational errors in accordance with strict JSON error tracking rules.
*/
export function handleFirestoreError(error: unknown, operationType: OperationType, path: string | null) {
const errInfo: FirestoreErrorInfo = {
error: error instanceof Error ? error.message : String(error),
authInfo: {
userId: auth.currentUser?.uid,
email: auth.currentUser?.email,
emailVerified: auth.currentUser?.emailVerified,
isAnonymous: auth.currentUser?.isAnonymous,
tenantId: auth.currentUser?.tenantId,
providerInfo: auth.currentUser?.providerData?.map(provider => ({
providerId: provider.providerId,
email: provider.email,
})) || []
},
operationType,
path
};
console.error('Firestore Error Tracked: ', JSON.stringify(errInfo));
throw new Error(JSON.stringify(errInfo));
}
/**
* Validates connection to Firestore on initial boot.
*/
async function testConnection() {
try {
await getDocFromServer(doc(db, 'test', 'connection'));
} catch (error) {
if (error instanceof Error && error.message.includes('the client is offline')) {
console.error("Please check your Firebase configuration or networks. Client appears offline.");
}
}
}
// Quietly test connection on startup
testConnection();