import { FunctionsController } from "./controllers/functions.controller";
import { HttpClientController } from "./controllers/http-client.controller";
import { SocketController } from "./controllers/socket.controller";
import { HttpRequestModel } from "./models/HttpRequestModel";
import { EventResponseModel, HttpResponseModel } from "./models/HttpResponseModel";
import { HttpNextModel } from "./models/HttpNextModel";
import { AuthController } from "./controllers/auth.controller";
export declare class BfastFunctions {
    private readonly appName;
    private readonly authController;
    private readonly httpClientController;
    constructor(appName: string, authController: AuthController, httpClientController: HttpClientController);
    /**
     * exec a http client request
     * @param path {string} function name
     */
    request(path: string): FunctionsController;
    /**
     * listen for a realtime event from a bfast::functions
     * @param eventName
     * @param onConnect {function} callback when connection established
     * @param onDisconnect {function} callback when connection terminated
     */
    event(eventName: string, onConnect?: Function, onDisconnect?: Function): SocketController;
    onHttpRequest(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        method: null;
        path: string;
        onRequest: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onPostHttpRequest(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        method: string;
        path: string;
        onRequest: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onPutHttpRequest(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        method: string;
        path: string;
        onRequest: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onDeleteHttpRequest(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        method: string;
        path: string;
        onRequest: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onGetHttpRequest(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        method: string;
        path: string;
        onRequest: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onEvent(path: string, handler: (request: {
        auth?: any;
        body?: any;
    }, response: EventResponseModel) => any): {
        name: string;
        onEvent: (request: {
            auth?: any;
            body?: any;
        }, response: EventResponseModel) => any;
    };
    onGuard(path: string, handler: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel) => any)): {
        path: string;
        onGuard: ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any)[] | ((request: HttpRequestModel, response: HttpResponseModel, next?: HttpNextModel | undefined) => any);
    };
    onJob(schedule: {
        second?: string;
        minute?: string;
        hour?: string;
        day?: string;
        month?: string;
        dayOfWeek?: string;
    }, handler: (job: any) => any): {
        onJob: (job: any) => any;
        rule: any;
    };
}
