import { TurboModuleRegistry, NativeModules, NativeEventEmitter, } from 'react-native'; import type { Spec } from '../specs/NativeNamiPaywallManager'; import type { NamiPurchaseDetails, NamiPurchaseSuccessApple, NamiPurchaseSuccessAmazon, NamiPurchaseSuccessGooglePlay, NamiSKU, } from '../src/types'; const RNNamiPaywallManager: Spec = TurboModuleRegistry.getEnforcing?.('RNNamiPaywallManager') ?? NativeModules.RNNamiPaywallManager; const emitter = new NativeEventEmitter(NativeModules.RNNamiPaywallManager); export enum NamiPaywallManagerEvents { BuySku = 'RegisterBuySKU', Close = 'PaywallCloseRequested', SignIn = 'PaywallSignInRequested', Restore = 'PaywallRestoreRequested', DeeplinkAction = 'PaywallDeeplinkAction', } export const NamiPaywallManager = { emitter, // New unified purchase success handler buySkuComplete: (purchase: NamiPurchaseDetails): void => { RNNamiPaywallManager.buySkuComplete(purchase); }, // Compatibility shims buySkuCompleteApple: (purchase: NamiPurchaseSuccessApple): void => { RNNamiPaywallManager.buySkuComplete(purchase); }, buySkuCompleteAmazon: (purchase: NamiPurchaseSuccessAmazon): void => { RNNamiPaywallManager.buySkuComplete(purchase); }, buySkuCompleteGooglePlay: (purchase: NamiPurchaseSuccessGooglePlay): void => { RNNamiPaywallManager.buySkuComplete(purchase); }, registerBuySkuHandler: (callback: (sku: NamiSKU) => void): (() => void) => { const sub = emitter.addListener(NamiPaywallManagerEvents.BuySku, callback); RNNamiPaywallManager.registerBuySkuHandler?.(); return () => sub.remove(); }, registerCloseHandler: (callback: () => void): (() => void) => { const sub = emitter.addListener(NamiPaywallManagerEvents.Close, callback); RNNamiPaywallManager.registerCloseHandler?.(); return () => sub.remove(); }, registerSignInHandler: (callback: () => void): (() => void) => { const sub = emitter.addListener(NamiPaywallManagerEvents.SignIn, callback); RNNamiPaywallManager.registerSignInHandler?.(); return () => sub.remove(); }, registerRestoreHandler: (callback: () => void): (() => void) => { const sub = emitter.addListener(NamiPaywallManagerEvents.Restore, callback); RNNamiPaywallManager.registerRestoreHandler?.(); return () => sub.remove(); }, registerDeeplinkActionHandler: ( callback: (url: string) => void, ): (() => void) => { const sub = emitter.addListener( NamiPaywallManagerEvents.DeeplinkAction, callback, ); RNNamiPaywallManager.registerDeeplinkActionHandler?.(); return () => sub.remove(); }, dismiss: async (): Promise => { await RNNamiPaywallManager.dismiss(); return true; }, show: (): void => { RNNamiPaywallManager.show(); }, hide: (): void => { RNNamiPaywallManager.hide(); }, isHidden: async (): Promise => { return RNNamiPaywallManager.isHidden(); }, isPaywallOpen: async (): Promise => { return RNNamiPaywallManager.isPaywallOpen(); }, buySkuCancel: (): void => { RNNamiPaywallManager.buySkuCancel(); }, setProductDetails: (productDetails: string, allowOffers: boolean): void => { RNNamiPaywallManager.setProductDetails(productDetails, allowOffers); }, setAppSuppliedVideoDetails: (url: string, name?: string): void => { RNNamiPaywallManager.setAppSuppliedVideoDetails(url, name); }, allowUserInteraction: (allowed: boolean): void => { RNNamiPaywallManager.allowUserInteraction(allowed); }, };