import { getAnalytics, logEvent } from "@firebase/analytics"; import { initializeApp } from "@firebase/app"; import { getAuth, updatePassword, updateProfile } from "@firebase/auth"; import { getFirestore } from "@firebase/firestore"; import { getMessaging, getToken, onMessage } from "@firebase/messaging"; import { store } from "../redux/store"; //import * as amplitude from '@amplitude/analytics-browser'; // import posthog from 'posthog-js' const config = JSON.parse(import.meta.env.VITE_APP_FIREBASE_CONFIG); initializeApp(config); export const auth = getAuth(); export const firestore = getFirestore(); export const analytics = getAnalytics(); //export default firebase; export const getCurrentUser = () => { return new Promise((resolve, reject) => { const unsubscribe = auth.onAuthStateChanged((userAuth) => { unsubscribe(); resolve(userAuth); }, reject); }); }; export const updateCurrentUser = (userDetails) => { return new Promise((resolve, reject) => { const unsubscribe = auth.onAuthStateChanged((userAuth) => { updateProfile(userAuth, userDetails).then(() => { unsubscribe(); resolve(userAuth); }); }, reject); }); }; export const updateCurrentPassword = async (password) => { const currentUser = await getCurrentUser(); return updatePassword(currentUser, password); }; let messaging; try { messaging = getMessaging(); } catch (error) { console.log(error); } export { messaging }; export const requestForToken = () => { return getToken(messaging, { vapidKey: import.meta.env.VITE_APP_FIREBASE_PUBLIC_VAPID_KEY }) .then((currentToken) => { if (currentToken) { window.sessionStorage.setItem("fcmtoken", currentToken); // Perform any other necessary action with the token } else { // Show permission request UI console.log("No registration token available. Request permission to generate one."); } }) .catch((err) => { console.log("An error occurred while retrieving token. ", err); }); }; onMessage(messaging, (payload) => { console.log("FCM Message received. ", payload); // ... }); export const logImEXEvent = (eventName, additionalParams, stateProp = null) => { try { const state = stateProp || store.getState(); const eventParams = { shop: (state.user && state.user.bodyshop && state.user.bodyshop.shopname) || null, user: (state.user && state.user.currentUser && state.user.currentUser.email) || null, partsManagementOnly: state?.user?.partsManagementOnly, ...additionalParams }; // axios.post("/ioevent", { // useremail: (state.user && state.user.currentUser && state.user.currentUser.email) || null, // bodyshopid: (state.user && state.user.bodyshop && state.user.bodyshop.id) || null, // operationName: eventName, // variables: additionalParams, // dbevent: false, // env: `master-AIO|${import.meta.env.VITE_APP_GIT_SHA_DATE}` // }); // console.log( // "%c[Analytics]", // "background-color: green ;font-weight:bold;", // eventName, // eventParams // ); logEvent(analytics, eventName, eventParams); //amplitude.track(eventName, eventParams); //posthog.capture(eventName, eventParams); } finally { //If it fails, just keep going. } };