/// <reference types="node" />
import Block from './block';
import User from './user';
import WBBEvent from './wbb-event';
import { DeepPartial } from '../helpers/helpers-types';
import { MediaUseCase } from '../const/media-use-case-enums';
export interface WebhookResponse {
    profiling?: any;
    unsetFunctionForm?: boolean;
    tryAgain?: boolean;
    errBlockPointer?: BlockPointer;
    botResponse: ResponseUnit[];
    followUp?: FollowUpParams;
    fileLinkBlock?: FileLinkBlockParams;
}
export interface Client {
    system: {
        name: string;
        serviceDeskEmail?: string;
        timezone?: string;
    };
}
export interface JWTPayload {
    bodyMd5Hash: string;
}
export interface WebhookRequest {
    client: Client;
    user: User;
    inputEvent: WBBEvent;
    functionBlock: Block;
    formValue: any;
    args?: any;
}
export interface BlockPointer {
    id: string;
    args?: any;
}
export interface ResponseUnit {
    type: ResponseUnitType;
    block?: DeepPartial<Block>;
    blockPointer?: BlockPointer;
}
export declare enum ResponseUnitType {
    BLOCK = "block",
    BLOCK_POINTER = "block-pointer"
}
export interface FunctionFailureParams {
    errorBP: BlockPointer;
    tryAgain?: boolean;
    resetForm?: boolean;
}
export interface FollowUpParams {
    block: BlockPointer;
    schedule: Date;
    viaEmail?: boolean;
    blockArgs?: Record<string, any>;
    cancelExisting?: boolean;
}
export interface FileLinkBlockParams {
    blockId: string;
    args?: Record<string, any>;
    clientName: string;
    mediaOptions?: MediaUseCase;
    file?: Buffer;
}
