MindSpark / firebase.ts
TheK3R1M's picture
Add API Key Onboarding Modal and Firebase Local Mode
77d0015 verified
import { initializeApp } from 'firebase/app';
import { getAuth, GoogleAuthProvider, signInWithPopup, signOut } from 'firebase/auth';
import { getFirestore, doc, getDocFromServer } from 'firebase/firestore';
const firebaseConfig = {
apiKey: import.meta.env.VITE_FIREBASE_API_KEY || "dummy-api-key",
authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN || "dummy-auth-domain",
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID || "dummy-project-id",
storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET || "dummy-storage-bucket",
messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID || "dummy-sender-id",
appId: import.meta.env.VITE_FIREBASE_APP_ID || "dummy-app-id",
measurementId: import.meta.env.VITE_FIREBASE_MEASUREMENT_ID || "dummy-measurement-id"
};
// Check if Firebase config is complete to avoid "invalid-api-key" error
const isDummy = firebaseConfig.apiKey === "dummy-api-key" || !firebaseConfig.apiKey;
if (isDummy) {
console.log("Firebase is running in Local Workspace Mode (No API keys provided). Data will be saved locally.");
}
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
export const db = getFirestore(app, import.meta.env.VITE_FIREBASE_FIRESTORE_DATABASE_ID || '(default)');
export const googleProvider = new GoogleAuthProvider();
export const signInWithGoogle = async () => {
if (isDummy) {
throw new Error("LocalMode");
}
try {
const result = await signInWithPopup(auth, googleProvider);
return result.user;
} catch (error) {
console.error("Error signing in with Google", error);
throw error;
}
};
export const logOut = async () => {
if (isDummy) return;
try {
await signOut(auth);
} catch (error) {
console.error("Error signing out", error);
throw error;
}
};
// Test connection
async function testConnection() {
if (isDummy) return;
try {
await getDocFromServer(doc(db, 'test', 'connection'));
} catch (error) {
if(error instanceof Error && error.message.includes('the client is offline')) {
console.warn("Firebase client is offline. Defaulting to local mode.");
}
}
}
testConnection();