/// <reference types="node" />
import * as express from 'express';
import { ILoggerInstance, IMessageEvent, IMessageStatusEvent, Channel, MessageDirection } from '../types';
import { Logger } from '../utils/logger';
import { EventEmitter } from 'events';
import { Client } from './client';
import { Server } from 'http';
declare type MessageEventCallback = (event: IMessageEvent) => void;
declare type MessageStatusEventCallback = (event: IMessageStatusEvent) => void;
/**
 * Webhook configuration options.
 */
export interface IWebhookOptions {
    /**
     * Port. The default port is `3000`.
     */
    port?: number;
    /**
     * Path. The default path is `/`.
     */
    path?: string;
    /**
     * Callback to receive a message event.
     */
    messageEventHandler?: MessageEventCallback;
    /**
     * Callback to receive a message status event.
     */
    messageStatusEventHandler?: MessageStatusEventCallback;
    /**
     * Client to create a subscription.
     */
    client?: Client;
    /**
     * URL to create a subscription.
     */
    url?: string;
    /**
     * Channel to create a subscription.
     */
    channel?: Channel;
    /**
     * Message direction to create a subscription.
     */
    direction?: MessageDirection;
    /**
     * Log instance.
     */
    loggerInstance?: ILoggerInstance;
}
export declare class WebhookController extends EventEmitter {
    options: IWebhookOptions;
    protected logger: Logger;
    server: Server;
    app: express.Application;
    constructor(options: IWebhookOptions);
    init(): Promise<void>;
    close(): Promise<void>;
    private startServer;
    private handler;
    private startSubscriptions;
}
export {};
