about summary refs log tree commit diff
path: root/src/lib/analytics
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/analytics')
-rw-r--r--src/lib/analytics/analytics.tsx32
-rw-r--r--src/lib/analytics/analytics.web.tsx9
2 files changed, 23 insertions, 18 deletions
diff --git a/src/lib/analytics/analytics.tsx b/src/lib/analytics/analytics.tsx
index 3a8254eb1..1650dfd3f 100644
--- a/src/lib/analytics/analytics.tsx
+++ b/src/lib/analytics/analytics.tsx
@@ -7,20 +7,17 @@ import {
   useAnalytics as useAnalyticsOrig,
   ClientMethods,
 } from '@segment/analytics-react-native'
-import {z} from 'zod'
-import {useSession} from '#/state/session'
+import {useSession, SessionAccount} from '#/state/session'
 import {sha256} from 'js-sha256'
 import {ScreenEvent, TrackEvent} from './types'
 import {logger} from '#/logger'
-import {listenSessionLoaded} from '#/state/events'
 
-export const appInfo = z.object({
-  build: z.string().optional(),
-  name: z.string().optional(),
-  namespace: z.string().optional(),
-  version: z.string().optional(),
-})
-export type AppInfo = z.infer<typeof appInfo>
+type AppInfo = {
+  build?: string | undefined
+  name?: string | undefined
+  namespace?: string | undefined
+  version?: string | undefined
+}
 
 const segmentClient = createClient({
   writeKey: '8I6DsgfiSLuoONyaunGoiQM7A6y2ybdI',
@@ -58,8 +55,10 @@ export function useAnalytics() {
   }, [hasSession, methods])
 }
 
-export function init() {
-  listenSessionLoaded(account => {
+export function init(account: SessionAccount | undefined) {
+  setupListenersOnce()
+
+  if (account) {
     if (account.did) {
       const did_hashed = sha256(account.did)
       segmentClient.identify(did_hashed, {did_hashed})
@@ -68,8 +67,15 @@ export function init() {
       logger.debug('Ping w/o hash')
       segmentClient.identify()
     }
-  })
+  }
+}
 
+let didSetupListeners = false
+function setupListenersOnce() {
+  if (didSetupListeners) {
+    return
+  }
+  didSetupListeners = true
   // NOTE
   // this is a copy of segment's own lifecycle event tracking
   // we handle it manually to ensure that it never fires while the app is backgrounded
diff --git a/src/lib/analytics/analytics.web.tsx b/src/lib/analytics/analytics.web.tsx
index 0a5d5d689..df03ee13c 100644
--- a/src/lib/analytics/analytics.web.tsx
+++ b/src/lib/analytics/analytics.web.tsx
@@ -6,9 +6,8 @@ import {
 } from '@segment/analytics-react'
 import {sha256} from 'js-sha256'
 
-import {useSession} from '#/state/session'
+import {useSession, SessionAccount} from '#/state/session'
 import {logger} from '#/logger'
-import {listenSessionLoaded} from '#/state/events'
 
 const segmentClient = createClient(
   {
@@ -44,8 +43,8 @@ export function useAnalytics() {
   }, [hasSession, methods])
 }
 
-export function init() {
-  listenSessionLoaded(account => {
+export function init(account: SessionAccount | undefined) {
+  if (account) {
     if (account.did) {
       if (account.did) {
         const did_hashed = sha256(account.did)
@@ -56,7 +55,7 @@ export function init() {
         segmentClient.identify()
       }
     }
-  })
+  }
 }
 
 export function Provider({children}: React.PropsWithChildren<{}>) {