UNPKG

@simplito/privmx-webendpoint

Version:

PrivMX Web Endpoint library

236 lines (235 loc) 9.7 kB
import { Types } from ".."; export type Channel = 'inbox' | `inbox/${string}/entries` | 'store' | `store/${string}/files` | 'thread' | `thread/${string}/messages` | `connection/${string}`; /** * Represents a generic event structure. */ export interface GenericEvent<K extends keyof EventPayload> extends Types.Event { /** * Type of the event. */ type: keyof EventPayload; /** * The channel through which the event was emitted. */ channel: Channel; /** * Data associated with the event. */ data: EventPayload[K]; /** * ID of connection to which the event was sent. */ connectionId: number; } export interface EventPayload { threadCreated: Types.Thread; threadUpdated: Types.Thread; threadDeleted: { threadId: string; }; threadStatsChanged: { lastMsgDate: number; messagesCount: number; threadId: string; }; threadNewMessage: Types.Message; threadUpdatedMessage: Types.Message; threadMessageDeleted: { threadId: string; messageId: string; }; storeCreated: Types.Store; storeUpdated: Types.Store; storeDeleted: { storeId: string; }; storeStatsChanged: { contextId: string; storeId: string; lastFileDate: number; filesCount: number; }; storeFileCreated: Types.File; storeFileUpdated: Types.File; storeFileDeleted: { contextId: string; storeId: string; fileId: string; }; inboxDeleted: { inboxId: string; }; inboxUpdated: Types.Inbox; inboxCreated: Types.Inbox; inboxEntryCreated: Types.InboxEntry; inboxEntryDeleted: { inboxId: string; entryId: string; }; libConnected: undefined; libDisconnected: undefined; libPlatformDisconnected: undefined; libBreak: undefined; } type EventType = keyof EventPayload; type EventHandler<E extends keyof EventPayload> = { event: E; callback: (event: GenericEvent<E>) => void; }; export type OnMessageEventHandler = EventHandler<'threadMessageDeleted'> | EventHandler<'threadNewMessage'> | EventHandler<'threadUpdatedMessage'>; export type OnThreadEventHandler = EventHandler<'threadCreated'> | EventHandler<'threadDeleted'> | EventHandler<'threadUpdated'> | EventHandler<'threadStatsChanged'>; export type OnFileEventHandler = EventHandler<'storeFileDeleted'> | EventHandler<'storeFileCreated'> | EventHandler<'storeFileUpdated'>; export type OnStoreEventHandler = EventHandler<'storeCreated'> | EventHandler<'storeStatsChanged'> | EventHandler<'storeUpdated'> | EventHandler<'storeDeleted'>; export type OnInboxEventHandler = EventHandler<'inboxDeleted'> | EventHandler<'inboxCreated'> | EventHandler<'inboxUpdated'>; export type OnEntryEventHandler = EventHandler<'inboxEntryCreated'> | EventHandler<'inboxEntryDeleted'>; export type OnConnectionHandler = EventHandler<'libConnected'> | EventHandler<'libDisconnected'> | EventHandler<'libBreak'> | EventHandler<'libPlatformDisconnected'>; export declare abstract class BaseEventManager { private _listeners; get listeners(): Map<string, Function[]>; protected channels: Set<Channel>; protected abstract subscribeForModuleEvents(): Promise<void>; protected abstract subscribeForModuleElementsEvents(containerId: string): Promise<void>; protected abstract unsubscribeFromModuleEvents(): Promise<void>; protected abstract unsubscribeFromModuleElementsEvents(containerId: string): Promise<void>; constructor(); /** * Checks whether the user is subscribed to given channel * @param channel Channel * @returns {boolean} `boolean` */ protected isSubscribedToChannel(channel: Channel): boolean; protected hasEventsOnChannel(channel: Channel): boolean; /** * Removes an event listeners from given `channel` and `eventType` * @param {Channel} channel channel * @param {string} eventType type of the event * @param {function} callback callback function */ protected removeEventListener: (channel: Channel, eventType: EventType, callback: Function) => void; /** * Removes all listeners from given channel * @param {Channel} channel channel * @returns {void} */ removeChannelEvents: (channel: Channel) => void; dispatchEvent(event: Types.Event): void; /** * Add an event listeners on given channel and eventType * @param {Channel} channel channel * @param {string} eventType type of the event * @param {function} callback callback function * @returns {function} function to remove the event listeners */ private addEventListener; protected addContainerListener: (channel: Channel, eventType: EventType, callback: Function) => Promise<() => Promise<void>>; protected addContainerElementListener: (containerId: string, channel: Channel, eventType: EventType, callback: Function) => Promise<() => Promise<void>>; } export interface SubscriberForThreadsEvents { subscribeForThreadEvents(): Promise<void>; /** * Unsubscribes from the Thread module main events. */ unsubscribeFromThreadEvents(): Promise<void>; /** * Subscribes for events in given Thread. * @param {string} threadId ID of the Thread to subscribe */ subscribeForMessageEvents(threadId: string): Promise<void>; /** * Unsubscribes from events in given Thread. * @param {string} threadId ID of the Thread to unsubscribe */ unsubscribeFromMessageEvents(threadId: string): Promise<void>; } export declare class ThreadEventsManager extends BaseEventManager { private threadApi; constructor(threadApi: SubscriberForThreadsEvents); subscribeForModuleEvents(): Promise<void>; subscribeForModuleElementsEvents(id: string): Promise<void>; unsubscribeFromModuleEvents(): Promise<void>; unsubscribeFromModuleElementsEvents(id: string): Promise<void>; onThreadEvent(handler: OnThreadEventHandler): Promise<() => Promise<void>>; onMessageEvent(threadId: string, handler: OnMessageEventHandler): Promise<() => Promise<void>>; } export interface SubscriberForStoreEvents { subscribeForStoreEvents(): Promise<void>; /** * Unsubscribes from the Store module main events. */ unsubscribeFromStoreEvents(): Promise<void>; /** * Subscribes for events in given Store. * @param {string} storeId ID of the Store to subscribe */ subscribeForFileEvents(storeId: string): Promise<void>; /** * Unsubscribes from events in given Store. * @param {string} storeId ID of the Store to unsubscribe */ unsubscribeFromFileEvents(storeId: string): Promise<void>; } export declare class StoreEventsManager extends BaseEventManager { private storeApi; constructor(storeApi: SubscriberForStoreEvents); subscribeForModuleEvents(): Promise<void>; subscribeForModuleElementsEvents(id: string): Promise<void>; unsubscribeFromModuleEvents(): Promise<void>; unsubscribeFromModuleElementsEvents(id: string): Promise<void>; onStoreEvent(handler: OnStoreEventHandler): Promise<() => Promise<void>>; onFileEvent(storeId: string, handler: OnFileEventHandler): Promise<() => Promise<void>>; } export interface SubscriberForInboxEvents { subscribeForInboxEvents(): Promise<void>; /** * Unsubscribes from the Inbox module main events. */ unsubscribeFromInboxEvents(): Promise<void>; /** * Subscribes for events in given Inbox. * @param {string} inboxId ID of the Inbox to subscribe */ subscribeForEntryEvents(inboxId: string): Promise<void>; /** * Unsubscribes from events in given Inbox. * @param {string} inboxId ID of the Inbox to unsubscribe */ unsubscribeFromEntryEvents(inboxId: string): Promise<void>; } export declare class InboxEventsManager extends BaseEventManager { private inboxApi; constructor(inboxApi: SubscriberForInboxEvents); subscribeForModuleEvents(): Promise<void>; subscribeForModuleElementsEvents(id: string): Promise<void>; unsubscribeFromModuleEvents(): Promise<void>; unsubscribeFromModuleElementsEvents(id: string): Promise<void>; onInboxEvent(handler: OnInboxEventHandler): Promise<() => Promise<void>>; onEntryEvent(inboxId: string, handler: OnEntryEventHandler): Promise<() => Promise<void>>; } export declare class ConnectionEventsManager extends BaseEventManager { private connectionId; protected subscribeForModuleEvents(): Promise<void>; protected subscribeForModuleElementsEvents(): Promise<void>; protected unsubscribeFromModuleEvents(): Promise<void>; protected unsubscribeFromModuleElementsEvents(): Promise<void>; constructor(connectionId: string); onConnectionEvent(handler: OnConnectionHandler): Promise<() => Promise<void>>; } export declare class EventManager { private _isEventLoopRunning; dispatchers: ((event: Types.Event) => void)[]; private eventsQueue; constructor(); private listenForEvents; static startEventLoop(eventQueue: { waitEvent: () => Promise<Types.Event>; }): EventManager; stopEventLoop(): void; removeAllDispatchers: () => void; protected onEvent(event: Types.Event): void; registerDispatcher(manager: BaseEventManager): void; getThreadEventManager(threadApi: SubscriberForThreadsEvents): ThreadEventsManager; getStoreEventManager(storeApi: SubscriberForStoreEvents): StoreEventsManager; getInboxEventManager(inboxApi: SubscriberForInboxEvents): InboxEventsManager; getConnectionEventManager(connectionId: string): ConnectionEventsManager; } export {};