import type { AnalyticsAdapter, AnalyticsEvent, AliasPayload, GroupPayload, IdentifyPayload, ScreenEvent, } from '../types'; export interface SegmentAdapterOptions { /** * Your Segment write key. * The adapter expects `@segment/analytics-react-native` to be installed * and its client passed in via `client`. */ client: any; } /** * Segment adapter. * * Install peer dependency: * npm install @segment/analytics-react-native * * Usage: * import { createClient } from '@segment/analytics-react-native'; * const segmentClient = createClient({ writeKey: 'YOUR_KEY' }); * createAnalytics({ adapters: [createSegmentAdapter({ client: segmentClient })] }); */ export function createSegmentAdapter(options: SegmentAdapterOptions): AnalyticsAdapter { const { client } = options; return { name: 'segment', async initialize() { // Segment client self-initializes; nothing needed here }, async track(event: AnalyticsEvent) { await client.track(event.name, event.properties ?? {}); }, async screen(event: ScreenEvent) { await client.screen(event.name, event.properties ?? {}); }, async identify(payload: IdentifyPayload) { await client.identify(payload.userId, payload.traits ?? {}); }, async group(payload: GroupPayload) { await client.group(payload.groupId, payload.traits ?? {}); }, async alias(payload: AliasPayload) { await client.alias(payload.newId); }, async reset() { await client.reset(); }, async flush() { await client.flush(); }, }; }