(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) init-firestore-fn (.-initializeFirestore sdk-firestore) persistent-cache-fn (.-persistentLocalCache sdk-firestore) multi-tab-manager-fn (.-persistentMultipleTabManager sdk-firestore) db (init-firestore-fn app #js {:localCache (persistent-cache-fn #js {:tabManager (multi-tab-manager-fn)})} "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")