UNPKG

@neabyte/touchid

Version:

Native macOS Touch ID authentication with device identification, TTL caching, and TypeScript support. Features hardware UUID, device serial, and biometric type detection.

67 lines (66 loc) 1.98 kB
export class TouchIDEventEmitterImpl { listeners = new Map(); on(event, handler) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event).push({ handler: handler, once: false }); } off(event, handler) { const eventListeners = this.listeners.get(event); if (!eventListeners) { return; } const index = eventListeners.findIndex(listener => listener.handler === handler); if (index !== -1) { eventListeners.splice(index, 1); } if (eventListeners.length === 0) { this.listeners.delete(event); } } once(event, handler) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event).push({ handler: handler, once: true }); } removeAllListeners(event) { if (event) { this.listeners.delete(event); } else { this.listeners.clear(); } } emit(event, data) { const eventListeners = this.listeners.get(event); if (!eventListeners || eventListeners.length === 0) { return; } const listenersToExecute = [...eventListeners]; const remainingListeners = eventListeners.filter(listener => !listener.once); this.listeners.set(event, remainingListeners); for (const listener of listenersToExecute) { try { listener.handler(data); } catch (error) { console.error(`Error in event handler for ${event}:`, error); } } } listenerCount(event) { const eventListeners = this.listeners.get(event); return eventListeners ? eventListeners.length : 0; } eventNames() { return Array.from(this.listeners.keys()); } }