UNPKG

@vegaci_shared/vsplit-payment-gateway

Version:

A B2B payment gateway integration package for Stripe with split payment capabilities

85 lines (84 loc) 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; /** * Generic event emitter for payment gateway events */ class EventEmitter { constructor() { this.listeners = new Map(); } /** * Subscribe to an event */ on(event, callback) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.listeners.get(event).push(callback); } /** * Unsubscribe from an event */ off(event, callback) { const eventListeners = this.listeners.get(event); if (eventListeners) { const index = eventListeners.indexOf(callback); if (index > -1) { eventListeners.splice(index, 1); } } } /** * Emit an event */ emit(event, ...args) { const eventListeners = this.listeners.get(event); if (eventListeners) { eventListeners.forEach((callback) => { try { callback(...args); } catch (error) { console.error(`Error in event listener for ${String(event)}:`, error); } }); } } /** * Subscribe to an event once */ once(event, callback) { const onceCallback = ((...args) => { callback(...args); this.off(event, onceCallback); }); this.on(event, onceCallback); } /** * Remove all listeners for a specific event */ removeAllListeners(event) { if (event) { this.listeners.delete(event); } else { this.listeners.clear(); } } /** * Get listener count for an event */ listenerCount(event) { const eventListeners = this.listeners.get(event); return eventListeners ? eventListeners.length : 0; } /** * Get all event names */ eventNames() { return Array.from(this.listeners.keys()); } } exports.EventEmitter = EventEmitter;