import Step from '@onereach/flow-sdk/dst/step';
import { CONFIG, IThreadId } from '@onereach/flow-sdk/dst/types/thread';
import { IMergeField } from '@onereach/flow-sdk/dst/types/mergeFields';
import { IEvent } from "@onereach/flow-sdk/types/event";
export interface ConvStepDataIn {
    conversation?: string | IMergeField;
    conversationThread?: IThreadId;
}
export interface IConversation {
    dummy?: never;
}
export interface IConversationData {
    _conv: IConversation;
}
export default class ConvStep<TData extends IConversationData, TIn = unknown, TOut = unknown, TEvents extends IEvent<any> = IEvent<any>> extends Step<CONFIG<TIn & ConvStepDataIn, TOut, TEvents, any, any, any>> {
    private convDataCache?;
    get cache(): TData | undefined;
    get conversation(): string | IMergeField;
    get conversationId(): string;
    get workerThreadId(): string;
    /** id of the thread where conversation data is stored */
    get dataThreadId(): IThreadId;
    get isGlobal(): boolean;
    get isWorker(): boolean;
    get useQueue(): boolean;
    fetchData(): Promise<TData>;
    getConversation(): Promise<IConversation>;
    updateData(): Promise<void>;
    hasConversation(): Promise<boolean>;
    runBefore(): Promise<void>;
    protected onSkipEvent(): Promise<void>;
    cancel(): Promise<void>;
    protected onCancel(): Promise<void>;
    onSleep(): Promise<void>;
    onAwake(): Promise<void>;
    onPause(): Promise<void>;
    onResume(): Promise<void>;
    waitConvEnd(): Promise<void>;
    waitGlobEnd(): Promise<void>;
    onConvEnd(): Promise<void>;
    pause(): Promise<void>;
    resume(): Promise<void>;
    startConversation(data: TData, { thread }?: {
        thread?: IThreadId;
    }): Promise<void>;
    protected _fetchCache(): Promise<(TData) | undefined>;
    protected _clearCache(): void;
    protected _refreshCache(): Promise<void>;
}
