import {EmitterSubscription, NativeEventEmitter, NativeModules} from 'react-native'; import { AdditionalConsentModeData, BannerSettings, CCPAData, GppData, GppSectionChangePayload, TCFData, TCFDecisionUILayer, TCFUserDecisionOnPurpose, TCFUserDecisionOnVendor, TCFUserDecisions, UsercentricsAnalyticsEventType, UsercentricsCMPData, UsercentricsConsentType, UsercentricsConsentUserResponse, UsercentricsOptions, UsercentricsReadyStatus, UsercentricsServiceConsent, UserDecision, } from './models'; import NativeUsercentrics from './NativeUsercentrics'; // Use TurboModule when available, fallback to legacy bridge const RNUsercentricsModule = NativeUsercentrics || NativeModules.RNUsercentricsModule; const eventEmitter = new NativeEventEmitter(RNUsercentricsModule); export const Usercentrics = { configure: (options: UsercentricsOptions) => { RNUsercentricsModule.configure(options) }, status: (): Promise => { return RNUsercentricsModule.isReady(); }, showFirstLayer: async (options?: BannerSettings): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.showFirstLayer(options); }, showSecondLayer: async (options?: BannerSettings): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.showSecondLayer(options); }, restoreUserSession: async (controllerId: string): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.restoreUserSession(controllerId); }, getControllerId: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getControllerId(); }, getABTestingVariant: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getABTestingVariant(); }, getConsents: async (): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getConsents(); }, getCMPData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getCMPData(); }, getUserSessionData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getUserSessionData(); }, getCCPAData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getUSPData(); }, getGPPData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getGPPData(); }, getGPPString: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getGPPString(); }, getTCFData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getTCFData(); }, getAdditionalConsentModeData: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getAdditionalConsentModeData(); }, getDpsMetadata: async (templateId: string): Promise | null> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.getDpsMetadata(templateId); }, changeLanguage: async (language: string): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.changeLanguage(language); }, acceptAll: async (consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.acceptAll(consentType); }, acceptAllForTCF: async (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.acceptAllForTCF(fromLayer, consentType); }, denyAll: async (consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.denyAll(consentType); }, denyAllForTCF: async (fromLayer: TCFDecisionUILayer, consentType: UsercentricsConsentType, unsavedPurposeLIDecisions: TCFUserDecisionOnPurpose[] = [], unsavedVendorLIDecisions: TCFUserDecisionOnVendor[] = []): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.denyAllForTCF(fromLayer, consentType, unsavedPurposeLIDecisions, unsavedVendorLIDecisions); }, saveDecisions: async (decisions: UserDecision[], consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.saveDecisions(decisions, consentType); }, saveDecisionsForTCF: async (tcfDecisions: TCFUserDecisions, fromLayer: TCFDecisionUILayer, decisions: UserDecision[], consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.saveDecisionsForTCF(tcfDecisions, fromLayer, decisions, consentType); }, saveOptOutForCCPA: async (isOptedOut: boolean, consentType: UsercentricsConsentType): Promise> => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.saveOptOutForCCPA(isOptedOut, consentType); }, setCMPId: (id: number) => { RNUsercentricsModule.setCMPId(id); }, setABTestingVariant: (variant: string) => { RNUsercentricsModule.setABTestingVariant(variant); }, setGPPConsent: async (sectionName: string, fieldName: string, value: unknown) => { await RNUsercentricsModule.isReady(); RNUsercentricsModule.setGPPConsent(sectionName, fieldName, { value } as Object); }, track: async (event: UsercentricsAnalyticsEventType) => { await RNUsercentricsModule.isReady(); RNUsercentricsModule.track(event); }, clearUserSession: async (): Promise => { await RNUsercentricsModule.isReady(); return RNUsercentricsModule.clearUserSession(); }, onGppSectionChange: (callback: (payload: GppSectionChangePayload) => void): EmitterSubscription => { return eventEmitter.addListener("onGppSectionChange", callback); }, }