(ns outliner.boundaries.firebase) (def firebase-config {:apiKey "AIzaSyCRrnqA8wgKI-bDhKVdQK4LcTj15BkSqvI" :authDomain "outliner-639aa.firebaseapp.com" :projectId "outliner-639aa" :storageBucket "outliner-639aa.appspot.com" :messagingSenderId "76213734412" :appId "1:76213734412:web:0ec874e5a26b9217c23229"}) (defn get-sdk [] js/window.FirebaseSDK) (defn init-firebase! [] (js/console.log "init-firebase! called") (let [sdk (get-sdk)] (if-not sdk (do (js/console.warn "Firebase SDK not ready yet, retrying in 500ms") (js/setTimeout init-firebase! 500)) (try (let [sdk-app (.-app sdk) init-fn (.-initializeApp sdk-app) app (init-fn (clj->js firebase-config)) sdk-auth (.-auth sdk) get-auth-fn (.-getAuth sdk-auth) auth (get-auth-fn app) sdk-firestore (.-firestore sdk) get-firestore-fn (.-getFirestore sdk-firestore) db (get-firestore-fn app "palatium")] (set! (.-firebaseAuth js/window) auth) (set! (.-firebaseDB js/window) db) (set! (.-fb js/window) #js {:auth #js {:GoogleAuthProvider (.-GoogleAuthProvider sdk-auth) :signInWithPopup (.-signInWithPopup sdk-auth) :signInWithRedirect (.-signInWithRedirect sdk-auth) :getRedirectResult (.-getRedirectResult sdk-auth) :signOut (.-signOut sdk-auth) :onAuthStateChanged (.-onAuthStateChanged sdk-auth)} :firestore #js {:doc (.-doc sdk-firestore) :setDoc (.-setDoc sdk-firestore) :getDoc (.-getDoc sdk-firestore) :getDocs (.-getDocs sdk-firestore) :deleteDoc (.-deleteDoc sdk-firestore) :writeBatch (.-writeBatch sdk-firestore) :onSnapshot (.-onSnapshot sdk-firestore) :collection (.-collection sdk-firestore)}}) (js/console.log "Firebase initialized successfully")) (catch js/Error e (js/console.error "Firebase: Failed to initialize" e)))))) ;; Try immediate init (init-firebase!) (defn get-user-display-name [user] (when user (or (.-displayName user) (.-email user) "Anonymous"))) (defn get-user-photo-url [user] (when user (.-photoURL user))) (defn get-user-uid [user] (when user (.-uid user))) (js/console.log "Initialized Firebase from ClojureScript")