Rework backend #1

Merged
robert merged 86 commits from rework-backend into main 2026-07-01 19:29:34 -04:00
Showing only changes of commit 3e84f28325 - Show all commits
+41 -22
View File
@@ -1,7 +1,7 @@
import React, { useState, useEffect, useRef, useMemo } from 'react'; import React, { useState, useEffect, useRef, useMemo } from 'react';
import { initializeApp } from './storage'; import { initializeApp } from './storage';
import { getAuth, signInAnonymously, onAuthStateChanged, signInWithCustomToken } from './storage'; import { getAuth, signInAnonymously, onAuthStateChanged, signInWithCustomToken } from './storage';
import { getFirestore, doc, setDoc, addDoc, collection, onSnapshot, updateDoc, deleteDoc, query, orderBy, limit, writeBatch, getStorage } from './storage'; import { getFirestore, doc, setDoc, addDoc, collection, onSnapshot, updateDoc, deleteDoc, query, orderBy, limit, writeBatch, getStorage, getStorageMode } from './storage';
import { import {
PlusCircle, Users, Swords, Trash2, Eye, Edit3, Save, XCircle, ChevronsUpDown, PlusCircle, Users, Swords, Trash2, Eye, Edit3, Save, XCircle, ChevronsUpDown,
UserCheck, UserX, HeartCrack, HeartPulse, Zap, EyeOff, ExternalLink, AlertTriangle, UserCheck, UserX, HeartCrack, HeartPulse, Zap, EyeOff, ExternalLink, AlertTriangle,
@@ -97,29 +97,40 @@ let db;
let auth; let auth;
let storage; let storage;
// Initialize Firebase const STORAGE_MODE = getStorageMode();
const initializeFirebase = () => {
const requiredKeys = ['apiKey', 'authDomain', 'projectId', 'appId'];
const missingKeys = requiredKeys.filter(key => !firebaseConfig[key]);
if (missingKeys.length > 0) { // Initialize storage backend. firebase mode = real SDK init.
console.error(`CRITICAL: Missing Firebase config values: ${missingKeys.join(', ')}`); // ws/memory mode = mock auth, no firebase.
return false; const initializeStorage = () => {
if (STORAGE_MODE === 'firebase') {
const requiredKeys = ['apiKey', 'authDomain', 'projectId', 'appId'];
const missingKeys = requiredKeys.filter(key => !firebaseConfig[key]);
if (missingKeys.length > 0) {
console.error(`CRITICAL: Missing Firebase config values: ${missingKeys.join(', ')}`);
return false;
}
try {
app = initializeApp(firebaseConfig);
db = getFirestore(app);
auth = getAuth(app);
storage = getStorage();
return true;
} catch (error) {
console.error("Error initializing Firebase:", error);
return false;
}
} }
try { // ws / memory mode: stub auth so App's anon-sign-in path works.
app = initializeApp(firebaseConfig); const FAKE_USER = { uid: 'local-user', isAnonymous: true };
db = getFirestore(app); auth = {
auth = getAuth(app); currentUser: FAKE_USER,
storage = getStorage(); };
return true; storage = getStorage();
} catch (error) { return true;
console.error("Error initializing Firebase:", error);
return false;
}
}; };
const isFirebaseInitialized = initializeFirebase(); const isInitialized = initializeStorage();
// ============================================================================ // ============================================================================
// FIRESTORE PATH HELPERS // FIRESTORE PATH HELPERS
@@ -2804,12 +2815,20 @@ function App() {
} }
if (!auth) { if (!auth) {
setError("Firebase Auth not initialized. Check your Firebase configuration."); setError("Auth not initialized.");
setIsLoading(false); setIsLoading(false);
setIsAuthReady(false); setIsAuthReady(false);
return; return;
} }
// ws/memory mode: stub auth, no SDK sign-in. Unblock UI immediately.
if (STORAGE_MODE !== 'firebase') {
setUserId(auth.currentUser?.uid || 'local-user');
setIsAuthReady(true);
setIsLoading(false);
return;
}
const initAuth = async () => { const initAuth = async () => {
try { try {
const token = window.__initial_auth_token; const token = window.__initial_auth_token;
@@ -2843,11 +2862,11 @@ function App() {
return () => unsubscribe(); return () => unsubscribe();
}, []); }, []);
if (!isFirebaseInitialized || !db || !auth) { if (!isInitialized || !auth) {
return ( return (
<ErrorDisplay <ErrorDisplay
critical critical
message="Firebase is not properly configured or initialized. Please check your .env.local file and ensure all REACT_APP_FIREBASE_... variables are correctly set." message={`${STORAGE_MODE === 'firebase' ? 'Firebase' : 'Storage'} is not properly configured. Check your .env.local file and ensure all REACT_APP_* variables are correctly set.`}
/> />
); );
} }