import { NativeModules, TurboModuleRegistry, TurboModule } from 'react-native'; import type { UsercentricsOptions, UsercentricsReadyStatus, BannerSettings, UsercentricsConsentUserResponse, UsercentricsServiceConsent, UsercentricsCMPData, AdditionalConsentModeData, TCFData, CCPAData, GppData, UserDecision, TCFUserDecisions, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor, } from './models'; export interface Spec extends TurboModule { // Configuration configure(options: UsercentricsOptions): void; isReady(): Promise; // UI Methods showFirstLayer(options?: BannerSettings): Promise; showSecondLayer(options?: BannerSettings): Promise; // Session Management restoreUserSession(controllerId: string): Promise; getControllerId(): Promise; clearUserSession(): Promise; // Data Retrieval getConsents(): Promise>; getCMPData(): Promise; getAdditionalConsentModeData(): Promise; getTCFData(): Promise; getUserSessionData(): Promise; getUSPData(): Promise; getGPPData(): Promise; getGPPString(): Promise; getABTestingVariant(): Promise; getDpsMetadata(templateId: string): Promise | null>; // Configuration Setters setCMPId(id: number): void; setABTestingVariant(variant: string): void; setGPPConsent(sectionName: string, fieldName: string, value: Object): void; changeLanguage(language: string): Promise; // Consent Actions acceptAll(consentType: number): Promise>; acceptAllForTCF(fromLayer: number, consentType: number): Promise>; denyAll(consentType: number): Promise>; denyAllForTCF(fromLayer: number, consentType: number, unsavedPurposeLIDecisions: Array, unsavedVendorLIDecisions: Array): Promise>; saveDecisions(decisions: Array, consentType: number): Promise>; saveDecisionsForTCF( tcfDecisions: TCFUserDecisions, fromLayer: number, saveDecisions: Array, consentType: number ): Promise>; saveOptOutForCCPA(isOptedOut: boolean, consentType: number): Promise>; // Analytics track(event: number): void; addListener(eventName: string): void; removeListeners(count: number): void; } // Try to get TurboModule first, fallback to NativeModule const RNUsercentricsModule = TurboModuleRegistry.get('RNUsercentricsModule') || NativeModules.RNUsercentricsModule; if (!RNUsercentricsModule) { throw new Error( 'Usercentrics React Native SDK: Native module not found. ' + 'Make sure the SDK is properly installed and linked. ' + 'For iOS, run "cd ios && pod install". ' + 'For Android, make sure autolinking is working correctly.' ); } export default RNUsercentricsModule as Spec;