import type { AnalyticsAdapter, AnalyticsEvent, IdentifyPayload, ScreenEvent, } from '../types'; export interface AmplitudeAdapterOptions { /** * Pass the Amplitude instance from `@amplitude/analytics-react-native`. * * Install peer dependency: * npm install @amplitude/analytics-react-native * * Usage: * import * as amplitude from '@amplitude/analytics-react-native'; * await amplitude.init('YOUR_API_KEY').promise; * createAnalytics({ adapters: [createAmplitudeAdapter({ instance: amplitude })] }); */ instance: any; /** Track screen views as events (default: 'Screen Viewed') */ screenEventName?: string; } export function createAmplitudeAdapter(options: AmplitudeAdapterOptions): AnalyticsAdapter { const { instance, screenEventName = 'Screen Viewed' } = options; return { name: 'amplitude', async initialize() { // Amplitude is initialized before being passed in }, async track(event: AnalyticsEvent) { instance.track(event.name, event.properties ?? {}); }, async screen(event: ScreenEvent) { instance.track(screenEventName, { screen_name: event.name, previous_screen: event.previousScreen, ...event.properties, }); }, async identify(payload: IdentifyPayload) { const { Identify } = instance; const identifyObj = new Identify(); if (payload.traits) { Object.entries(payload.traits).forEach(([key, value]) => { identifyObj.set(key, value); }); } instance.identify(identifyObj); instance.setUserId(payload.userId); }, async reset() { instance.reset(); }, async flush() { await instance.flush().promise; }, }; }