import { SlackMessage } from "@atomist/slack-messages";
import * as WebSocket from "ws";
import { Configuration } from "../../../configuration";
import { Destination, MessageOptions, RequiredMessageOptions } from "../../../spi/message/MessageClient";
import { MessageClientSupport } from "../../../spi/message/MessageClientSupport";
import { CommandIncoming, EventIncoming, Source } from "../RequestProcessor";
import { WebSocketLifecycle } from "./WebSocketLifecycle";
export declare abstract class AbstractMessageClient extends MessageClientSupport {
    protected readonly request: CommandIncoming | EventIncoming;
    protected readonly correlationId: string;
    protected readonly team: {
        id: string;
        name?: string;
    };
    protected readonly source: Source;
    protected readonly configuration: Configuration;
    constructor(request: CommandIncoming | EventIncoming, correlationId: string, team: {
        id: string;
        name?: string;
    }, source: Source, configuration: Configuration);
    delete(destinations: Destination | Destination[], options: RequiredMessageOptions): Promise<void>;
    protected doSend(msg: string | SlackMessage, destinations: Destination | Destination[], options?: MessageOptions): Promise<any>;
    protected abstract sendResponse(response: any): Promise<void>;
    private ts;
}
export declare class AbstractWebSocketMessageClient extends AbstractMessageClient {
    protected readonly ws: WebSocketLifecycle;
    protected readonly request: CommandIncoming | EventIncoming;
    protected readonly correlationId: string;
    protected readonly team: {
        id: string;
        name?: string;
    };
    protected readonly source: Source;
    protected readonly configuration: Configuration;
    constructor(ws: WebSocketLifecycle, request: CommandIncoming | EventIncoming, correlationId: string, team: {
        id: string;
        name?: string;
    }, source: Source, configuration: Configuration);
    protected sendResponse(response: any): Promise<void>;
}
export declare class WebSocketCommandMessageClient extends AbstractWebSocketMessageClient {
    constructor(request: CommandIncoming, ws: WebSocketLifecycle, configuration: Configuration);
    protected doSend(msg: string | SlackMessage, destinations: Destination | Destination[], options?: MessageOptions): Promise<any>;
}
export declare class WebSocketEventMessageClient extends AbstractWebSocketMessageClient {
    constructor(request: EventIncoming, ws: WebSocketLifecycle, configuration: Configuration);
    protected doSend(msg: string | SlackMessage, destinations: Destination | Destination[], options?: MessageOptions): Promise<any>;
}
export declare function mapActions(msg: SlackMessage): Action[];
export declare function sendMessage(message: any, ws: WebSocket, log?: boolean): void;
export declare function clean(addresses: string[] | string): string[];
export interface HandlerResponse {
    api_version: "1";
    correlation_id: any;
    team: {
        id: string;
        name?: string;
    };
    command?: string;
    event?: string;
    status?: {
        code: number;
        reason: string;
    };
    source?: Source;
    destinations?: any[];
    content_type?: string;
    body?: string;
    id?: string;
    timestamp?: number;
    ttl?: number;
    post_mode?: "ttl" | "always" | "update_only";
    actions?: Action[];
}
export interface Action {
    id: string;
    parameter_name?: string;
    command: string;
    parameters: Parameter[];
}
export interface Parameter {
    name: string;
    value: string;
}
//# sourceMappingURL=WebSocketMessageClient.d.ts.map