From 913b073ba423eada2b9322bfb81f3d175d20560d Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Mon, 5 Jul 2021 12:45:10 -0400 Subject: [PATCH] feat: add initial analytics implementation --- helpers/fb/analytics.ts | 48 +++++++++++++++++++++++++++++++++++++++++ helpers/fb/index.ts | 25 +++++++++++++-------- 2 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 helpers/fb/analytics.ts diff --git a/helpers/fb/analytics.ts b/helpers/fb/analytics.ts new file mode 100644 index 000000000..839b1448d --- /dev/null +++ b/helpers/fb/analytics.ts @@ -0,0 +1,48 @@ +import firebase from "firebase" +import { authEvents$ } from "./auth" +import { settings$ } from "~/newstore/settings" + +let analytics: firebase.analytics.Analytics + +type SettingsCustomDimensions = { + usesProxy: boolean + usesExtension: boolean + usesScrollInto: boolean + syncCollections: boolean + syncEnvironments: boolean + syncHistory: boolean +} + +export function initAnalytics() { + analytics = firebase.app().analytics() + + initLoginListeners() + initSettingsListeners() +} + +function initLoginListeners() { + authEvents$.subscribe((ev) => { + if (ev.event === "login") { + analytics.setUserId(ev.user.uid) + + analytics.logEvent("login", { + method: ev.user.providerData[0]?.providerId, // Assume the first provider is the login provider + }) + } else if (ev.event === "logout") { + analytics.logEvent("logout") + } + }) +} + +function initSettingsListeners() { + settings$.subscribe((settings) => { + analytics.setUserProperties({ + usesProxy: settings.PROXY_ENABLED, + usesExtension: settings.EXTENSIONS_ENABLED, + usesScrollInto: settings.SCROLL_INTO_ENABLED, + syncCollections: settings.syncCollections, + syncEnvironments: settings.syncEnvironments, + syncHistory: settings.syncHistory, + }) + }) +} diff --git a/helpers/fb/index.ts b/helpers/fb/index.ts index 25566d530..9eb128b11 100644 --- a/helpers/fb/index.ts +++ b/helpers/fb/index.ts @@ -1,4 +1,5 @@ import firebase from "firebase" +import { initAnalytics } from "./analytics" import { initAuth } from "./auth" import { initCollections } from "./collections" import { initEnvironments } from "./environments" @@ -13,21 +14,27 @@ const firebaseConfig = { storageBucket: process.env.STORAGE_BUCKET, messagingSenderId: process.env.MESSAGING_SENDER_ID, appId: process.env.APP_ID, - measurementId: process.env.MEASUREMENT_ID, + measurementId: process.env.FB_MEASUREMENT_ID, } let initialized = false export function initializeFirebase() { if (!initialized) { - firebase.initializeApp(firebaseConfig) + try { + firebase.initializeApp(firebaseConfig) - initAuth() - initSettings() - initCollections() - initHistory() - initEnvironments() + initAuth() + initSettings() + initCollections() + initHistory() + initEnvironments() + initAnalytics() - initialized = true + initialized = true + } catch (e) { + // initializeApp throws exception if we reinitialize + initialized = true + } } -} +} \ No newline at end of file