UNPKG

@marxlnfcs/wildduck-api

Version:

Provides a client to interact with the wildduck api

66 lines (65 loc) 1.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventClient = exports.createEventClient = void 0; const rxjs_1 = require("rxjs"); const utilities_1 = require("./utilities"); function createEventClient() { return new EventClient(); } exports.createEventClient = createEventClient; class EventClient { constructor() { this.eventHandlers = []; } on(id) { if (!this.eventHandlers.filter(h => h.id === formatEventId(id)).length) { const data$ = new rxjs_1.Subject(); this.eventHandlers.push({ id: formatEventId(id), data$: data$, observer$: data$.asObservable() }); } return this.eventHandlers.find(h => h.id === formatEventId(id)).observer$; } emit(id, data) { this.eventHandlers.map(handler => { if (handler.id === formatEventId(id)) { handler.data$.next(data); } }); return data; } emitFromResponse(id, response) { return this.emit(id, { request: response.config, response: response, error: null, }); } emitFromError(id, error) { return this.emit(id, { request: error.request, response: error.response, error: error, }); } destroy(id) { this.eventHandlers = this.eventHandlers.filter(handler => { if (!id || handler.id === formatEventId(id)) { handler.data$.complete(); return false; } return true; }); return this; } } exports.EventClient = EventClient; function formatEventId(id) { switch (true) { case typeof id === 'function': return (0, utilities_1.createChecksum)(id.toString().trim().toLowerCase()); case typeof id === 'string': return id.trim().toLowerCase(); default: return null; } }