@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
JavaScript
;
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;