import { type EmitterSubscription, NativeEventEmitter } from 'react-native'; import type { NativeModule } from 'react-native/Libraries/EventEmitter/NativeEventEmitter'; export class TapsellEventEmitter { private readonly emitter: NativeEventEmitter | undefined; private subscriptions: Map = new Map(); constructor(nativeModule: NativeModule) { try { this.emitter = new NativeEventEmitter(nativeModule); } catch (e) { console.error('Failed to initialize native event emitter:', e); } } public addListener( eventType: string, listener: (...args: any[]) => void ): void { if (this.emitter) { const subscription = this.emitter.addListener(eventType, listener); this.subscriptions.set(eventType, subscription); } else { console.warn( 'Native event emitter is not available. Listener not added.' ); } } public removeListener(eventType: string): void { const subscription = this.subscriptions.get(eventType); if (subscription) { subscription.remove(); this.subscriptions.delete(eventType); } } public removeAllListeners(): void { this.subscriptions.forEach((subscription) => subscription.remove()); this.subscriptions.clear(); } }