UNPKG

@simplito/privmx-webendpoint

Version:

PrivMX Web Endpoint library

117 lines (116 loc) 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventManager = void 0; const subscriptions_1 = require("./subscriptions"); const managers_1 = require("./managers"); function normalizeConnectionEvent(e) { switch (e.type) { case "libDisconnected": return { ...e, subscriptions: [ `${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_DISCONNECTED]}`, ], }; case "libPlatformDisconnected": return { ...e, subscriptions: [ `${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_PLATFORM_DISCONNECTED]}`, ], }; case "libConnected": return { ...e, subscriptions: [ `${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_CONNECTED]}`, ], }; default: return e; } } class EventManager { _isEventLoopRunning = false; dispatchers = []; eventsQueue = null; constructor() { } listenForEvents() { if (this.eventsQueue) { this.eventsQueue .waitEvent() .then((event) => { this.onEvent(event); this.listenForEvents(); }) .catch(() => { this.listenForEvents(); }); } } static startEventLoop(eventQueue) { const manager = new EventManager(); manager.eventsQueue = eventQueue; manager._isEventLoopRunning = true; manager.eventsQueue .waitEvent() .then((event) => { if (!manager._isEventLoopRunning) return; manager.onEvent(event); manager.listenForEvents(); }) .catch(() => { manager.listenForEvents(); }); return manager; } stopEventLoop() { this._isEventLoopRunning = false; } removeAllDispatchers = () => { this.dispatchers = []; }; onEvent(event) { this.dispatchers.forEach((cb) => cb(normalizeConnectionEvent(event))); } registerDispatcher(manager) { this.dispatchers.push((e) => manager.dispatchEvent(e)); } getThreadEventManager(threadApi) { const manager = new managers_1.ThreadEventsManager(threadApi); this.registerDispatcher(manager); return manager; } getStoreEventManager(storeApi) { const manager = new managers_1.StoreEventsManager(storeApi); this.registerDispatcher(manager); return manager; } getKvdbEventManager(kvdbApi) { const manager = new managers_1.KvdbEventsManager(kvdbApi); this.registerDispatcher(manager); return manager; } getInboxEventManager(inboxApi) { const manager = new managers_1.InboxEventsManager(inboxApi); this.registerDispatcher(manager); return manager; } getCustomEventsManager(eventApi) { const manager = new managers_1.CustomEventsManager(eventApi); this.registerDispatcher(manager); return manager; } getConnectionEventManager(connectionId) { const manager = new managers_1.ConnectionEventsManager(connectionId); this.registerDispatcher(manager); return manager; } getUserEventsManager(connectionApi) { const manager = new managers_1.UserEventsManager(connectionApi); this.registerDispatcher(manager); return manager; } } exports.EventManager = EventManager;