import { ActionsEnum, AuthKeys, WsDeliveryDebugLogger } from '../types'; import { StateType } from '../stateService/State'; export declare enum NotificationType { Message = "message", Info = "info", Error = "error" } export declare enum MessageType { ReceivedMessage = 1, SentMessage = 2, Info = 3, Error = 4 } export interface MessageData { action: ActionsEnum; owner: string; object: string; ttl?: number; validity?: number; state?: StateType; } export interface InfoData { message: string; } export interface ErrorData { error: string; code?: string | number; description?: string; requested?: SentMessage; } export type Notification = { type: NotificationType.Error; data: ErrorData; } | { type: NotificationType.Info; data: InfoData; } | { type: NotificationType.Message; data: MessageData; }; export type SendHandler = (deliveries: string[]) => void; export type MessageHandler = (message: Notification) => void; export type ErrorHandler = (error: any) => void; export type OpenHandler = (send: SendHandler) => void; export type CloseHandler = (e: number | CloseEvent) => void; export interface WebSocketOptions { baseUrlWs: string; authKeys: AuthKeys; onMessage: MessageHandler; onOpen?: OpenHandler; onClose?: CloseHandler; onError?: ErrorHandler; /** Optional tracing from BigStateWsDeliveryClient (`debug`). */ debugLog?: WsDeliveryDebugLogger; } export interface BaseMessage { type: MessageType; correlationId?: string; } export interface PayloadSentMessage { command: string; args?: string; } export interface SentMessage extends BaseMessage { payload: PayloadSentMessage; } export type ReceivedPayloadByType = { [MessageType.ReceivedMessage]: MessageData; [MessageType.Error]: ErrorData; }; export type ReceivedMessageByType = BaseMessage & { type: T; requested: SentMessage; payload: ReceivedPayloadByType[T]; }; export type ReceivedMessage = { [K in keyof ReceivedPayloadByType]: ReceivedMessageByType; }[keyof ReceivedPayloadByType];