import { Access, Chat, Environment, Location, FormRequestParam, FormTarget, MessageObject, User, ButtonObject, WidgetTarget } from '../common.js';
import HandlerResponse from '../response-objects/handler-response.js';
import FormChangeResponse from '../response-objects/form-change-response.js';
import FormDynamicFieldResponse from '../response-objects/form-dynamic-field-response.js';
import WidgetResponse from '../response-objects/widget-response.js';
import Form from '../response-objects/form.js';
interface FunctionRequest {
    name: string;
    user: User;
    chat: Chat;
    access: Access;
    environment: Environment;
    message: MessageObject;
}
interface ButtonFunctionRequest extends FunctionRequest {
    arguments: Record<string, unknown>;
    target: ButtonObject;
    location: Location;
    event: string;
}
interface FormFunctionRequest extends FunctionRequest {
    form: FormRequestParam;
    target: FormTarget;
    params?: Record<string, string>;
}
interface WidgetFunctionRequest extends Omit<FunctionRequest, 'chat' | 'message'> {
    target: WidgetTarget;
    arguments: Record<string, unknown>;
}
export default class FunctionHandler {
    buttonFunctionHandler(handler: (req: ButtonFunctionRequest, res: HandlerResponse, ...args: Array<unknown>) => Promise<unknown>): void;
    formSubmitHandler(handler: (req: FormFunctionRequest, res: HandlerResponse, ...args: Array<unknown>) => Promise<unknown>): void;
    formChangeHandler(handler: (req: FormFunctionRequest, res: FormChangeResponse, ...args: Array<unknown>) => Promise<typeof res | undefined>): void;
    formDynamicFieldHandler(handler: (req: FormFunctionRequest, res: FormDynamicFieldResponse, ...args: Array<unknown>) => Promise<typeof res | undefined>): void;
    formViewHandler(handler: (req: FormFunctionRequest, res: Form, ...args: Array<unknown>) => Promise<typeof res | undefined>): void;
    widgetButtonHandler(handler: (req: WidgetFunctionRequest, res: WidgetResponse, ...args: Array<unknown>) => Promise<typeof res | undefined>): void;
    newHandlerResponse(): HandlerResponse;
    newFormChangeResponse(): FormChangeResponse;
    newFormDynamicFieldResponse(): FormDynamicFieldResponse;
    newFormViewResponse(): Form;
    newWidgetResponse(): WidgetResponse;
}
export {};
