import { api, chatRoom, Initializer } from "../index";
import { Connection } from "../classes/connection";
import * as ChatModule from "./../modules/chatRoom";
export interface ChatRoomApi {
    middleware: {
        [key: string]: ChatModule.chatRoom.ChatMiddleware;
    };
    globalMiddleware: Array<string>;
    keys: {
        [keys: string]: string;
    };
    messageChannel: string;
    broadcast: ChatRoomInitializer["broadcast"];
    generateMessagePayload: ChatRoomInitializer["generateMessagePayload"];
    incomingMessage: ChatRoomInitializer["incomingMessage"];
    incomingMessagePerConnection?: ChatRoomInitializer["incomingMessagePerConnection"];
    runMiddleware: ChatRoomInitializer["runMiddleware"];
    removeMember: ChatRoomInitializer["removeMember"];
}
export type ChatMiddlewareDirections = "join" | "leave" | "onSayReceive" | "say";
export type MessagePayloadType = ReturnType<typeof api.chatRoom.generateMessagePayload>;
/**
 * Chat & Realtime Communication Methods
 */
export declare class ChatRoomInitializer extends Initializer {
    constructor();
    broadcast: (connection: Partial<Connection>, room: string, message: object | Array<any> | string) => Promise<void>;
    generateMessagePayload: (message: chatRoom.ChatPubSubMessage) => Record<string, any>;
    incomingMessage: (message: ChatModule.chatRoom.ChatPubSubMessage) => void;
    incomingMessagePerConnection: (connection: Connection, messagePayload: MessagePayloadType) => Promise<void>;
    runMiddleware: (connection: Partial<Connection>, room: string, direction: ChatMiddlewareDirections, messagePayload?: MessagePayloadType) => Promise<Record<string, any>>;
    removeMember: (connectionId: string, room: string, toWaitRemote?: boolean) => Promise<any>;
    initialize(): Promise<void>;
    start(): Promise<void>;
}
