@marxlnfcs/wildduck-api
Version:
Provides a client to interact with the wildduck api
66 lines (65 loc) • 1.99 kB
JavaScript
;
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;
}
}