import type { AnalyticsAdapter, AnalyticsEvent, AliasPayload, GroupPayload, IdentifyPayload, ScreenEvent, } from '../types'; export interface RudderStackAdapterOptions { /** * Pass the RudderStack client from `@rudderstack/rudder-sdk-react-native`. * * Install peer dependency: * npm install @rudderstack/rudder-sdk-react-native * * Usage: * import rudderClient from '@rudderstack/rudder-sdk-react-native'; * await rudderClient.setup('YOUR_WRITE_KEY', { dataPlaneUrl: 'YOUR_URL' }); * createAnalytics({ adapters: [createRudderStackAdapter({ client: rudderClient })] }); */ client: any; } export function createRudderStackAdapter(options: RudderStackAdapterOptions): AnalyticsAdapter { const { client } = options; return { name: 'rudderstack', async initialize() { // RudderStack is initialized before being passed in }, async track(event: AnalyticsEvent) { client.track(event.name, event.properties ?? {}); }, async screen(event: ScreenEvent) { client.screen(event.name, event.name, event.properties ?? {}); }, async identify(payload: IdentifyPayload) { client.identify(payload.userId, payload.traits ?? {}); }, async group(payload: GroupPayload) { client.group(payload.groupId, payload.traits ?? {}); }, async alias(payload: AliasPayload) { client.alias(payload.newId); }, async reset() { client.reset(); }, async flush() { client.flush(); }, }; }