import type { TurboModule } from 'react-native'; import { TurboModuleRegistry } from 'react-native'; import type { GuideOrSurvey } from './types'; import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes'; export type AnalyticsEvent = { event_type: string; event_properties: Object; }; export type CallbackInvocation = { id: number; key: string; }; export type RouterInvocation = { id: number; url: string; }; export interface Spec extends TurboModule { // Promise-returning so RN dispatches it off the JS thread instead of blocking // it while the native SDK is constructed. Each platform runs // the heavy init work off the app-launch critical path — iOS on a background // queue, Android in a background coroutine — and resolves with the native // instance handle. newInstance(apiKey: string, options?: Object): Promise; boot( id: number, user_id?: string, device_id?: string, user_properties?: Object ): void; enable(id: number): void; disable(id: number): void; shutdown(id: number): void; setThemeMode(id: number, themeMode: string /* ThemeMode */): void; reset(id: number, key: string, stepIndex: number): void; list(id: number): GuideOrSurvey[]; show(id: number, key: string, stepIndex: number): void; screen(id: number, screenName: string): void; closeAll(id: number): void; forwardEvent(id: number, event: Object /* BaseEvent */): void; addCallback(id: number, key: string): void; setRouter(id: number): void; unsetRouter(id: number): void; handleURL(id: number, url: string): boolean; updateLanguage(id: number, locale: string): void; readonly onTrackEvent: EventEmitter; readonly onInvokeCallback: EventEmitter; readonly onInvokeRouter: EventEmitter; } export default TurboModuleRegistry.getEnforcing( 'PluginEngagementReactNative' );