25a1ed1209
* WIP * Clean up growthbook code, integrate into init and sessions * Move everything out of React * Add metrics client * Move to separate file * Shared metadata cache * Ensure we update metadata when session ID changes * Ensure userMetadata is cleared when logging out * WIP revamp * Integrate feature gates into analytics context * Clean up old code * Fix useMeta util * Some comments and cleanup * Add logger to base analytics context * Refactor current route handling * Rip out LogEvent from navigation * Update tracking endpoint * Migrate toClout * Clear out statsig client * Add todo, reset logger readme * Ope fix statsig noop * Refactor logging in feed-feedback, add debug logging to metrics client * Remove LogEvents alias for Metrics * Prefer root package export * Remove Metrics alias from logger * [APP-1782] Migrate to new analytics APIs (#9735) * Migrate logEvent to useAnalytics * Migrate logger.metric to useAnalytics * Migrate tricky spot, fix types * Migrate remaining tricky spot * Missed one * Remove metric() from logger * Migrate useGate to useAnalytics * Remove all other StatSig mentions * Update event payload * Update logger tests * Mock expo method * Fix session ID bug * Add session ID test * Add test for metrics client * Clarify intent * Clean up core analytics file * Clean up the call once utils * Fix TODO * Fix TODO * Fix TODO * Fix TODO * Fix TODO * Remove debug code * Fix navigation context * OK nav context is not working, todo * Checkpoint: works but feels hacky * Fix navigation context issue * Improve feature API * Improve metric logging * Update logger tests
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import {useMemo} from 'react'
|
|
|
|
import {BSKY_SERVICE} from '#/lib/constants'
|
|
import {type SessionAccount} from '#/state/session'
|
|
import {
|
|
type MergeableMetadata,
|
|
type Metadata,
|
|
type SessionMetadata,
|
|
} from '#/analytics/metadata'
|
|
|
|
/**
|
|
* Thin `useMemo` wrapper that marks the metadata as memoized and provides a
|
|
* type guard.
|
|
*/
|
|
export function useMeta(metadata?: MergeableMetadata) {
|
|
const m = useMemo(() => metadata, [metadata])
|
|
if (!m) return
|
|
// @ts-ignore
|
|
m.__meta = true
|
|
return m
|
|
}
|
|
|
|
export function accountToSessionMetadata(
|
|
account: SessionAccount | undefined,
|
|
): SessionMetadata | undefined {
|
|
if (!account) {
|
|
return
|
|
} else {
|
|
return {
|
|
did: account.did,
|
|
isBskyPds: account.service.startsWith(BSKY_SERVICE),
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getMetadataForLogger({
|
|
base,
|
|
geolocation,
|
|
session,
|
|
}: Metadata): Record<string, any> {
|
|
return {
|
|
deviceId: base.deviceId,
|
|
sessionId: base.sessionId,
|
|
platform: base.platform,
|
|
appVersion: base.appVersion,
|
|
countryCode: geolocation.countryCode,
|
|
regionCode: geolocation.regionCode,
|
|
isBskyPds: session?.isBskyPds || 'anonymous',
|
|
}
|
|
}
|