import type { AnalyticsAdapter, AnalyticsEvent, AliasPayload, GroupPayload, IdentifyPayload, ScreenEvent, } from '../types'; export interface PostHogAdapterOptions { /** * Pass the PostHog client from `posthog-react-native`. * * Install peer dependency: * npm install posthog-react-native * * Usage: * import PostHog from 'posthog-react-native'; * const posthog = await PostHog.initAsync('YOUR_API_KEY'); * createAnalytics({ adapters: [createPostHogAdapter({ client: posthog })] }); */ client: any; } export function createPostHogAdapter(options: PostHogAdapterOptions): AnalyticsAdapter { const { client } = options; return { name: 'posthog', async initialize() { // PostHog is initialized before being passed in }, async track(event: AnalyticsEvent) { client.capture(event.name, event.properties ?? {}); }, async screen(event: ScreenEvent) { client.screen(event.name, event.properties ?? {}); }, async identify(payload: IdentifyPayload) { client.identify(payload.userId, payload.traits ?? {}); }, async group(payload: GroupPayload) { client.group('company', payload.groupId, payload.traits ?? {}); }, async alias(payload: AliasPayload) { client.alias(payload.newId); }, async reset() { client.reset(); }, async flush() { await client.flush(); }, }; }