import WebSocket = require('ws');
import { MessageSummary } from './MessageSummary';
declare const _resolveTemplateUrl: (baseUrl: string, domain: string, full?: boolean, limit?: number, throttleInterval?: string, del?: string) => string;
export interface StreamDomainMessagesRequestOptions {
    baseUrl?: string;
    webSocketFactory?: StreamDomainMessagesWebSocketFactory;
}
export interface StreamDomainMessagesRequestHandlers {
    onMessage: (message: MessageSummary) => void;
    onOpen?: () => void;
    onError?: (error: Error) => void;
    onClose?: (code: number, reason: string) => void;
}
export interface StreamDomainMessagesConnection {
    close: (code?: number, reason?: string) => void;
    socket: StreamDomainMessagesWebSocket;
}
export interface StreamDomainMessagesWebSocket {
    on(event: 'open', listener: () => void): this;
    on(event: 'message', listener: (payload: WebSocket.RawData) => void): this;
    on(event: 'error', listener: (error: Error) => void): this;
    on(event: 'close', listener: (code: number, reason: Buffer) => void): this;
    close(code?: number, reason?: string): void;
}
export type StreamDomainMessagesWebSocketFactory = (url: string, apiToken: string) => StreamDomainMessagesWebSocket;
export declare class StreamDomainMessagesRequest {
    private readonly domain;
    private readonly full?;
    private readonly limit?;
    private readonly throttleInterval?;
    private readonly del?;
    private readonly options;
    constructor(domain: string, full?: boolean | undefined, limit?: number | undefined, throttleInterval?: string | undefined, del?: string | undefined, options?: StreamDomainMessagesRequestOptions);
    execute(apiToken: string, handlers: StreamDomainMessagesRequestHandlers): StreamDomainMessagesConnection;
}
export { _resolveTemplateUrl };
