import { type Static } from "../core/utils";
import { Module } from "../modules/Module";
import { flowsConfigSchema } from "./flows-schema";
export type AppFlowsSchema = Static<typeof flowsConfigSchema>;
export type TAppFlowSchema = AppFlowsSchema["flows"][number];
export type TAppFlowTriggerSchema = TAppFlowSchema["trigger"];
export type { TAppFlowTaskSchema } from "./flows-schema";
export declare class AppFlows extends Module<typeof flowsConfigSchema> {
    private flows;
    getSchema(): import("@sinclair/typebox").TObject<{
        basepath: import("@sinclair/typebox").TString;
        flows: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
            trigger: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TObject<{
                type: import("@sinclair/typebox").TLiteral<"manual" | "event" | "http">;
                config: import("@sinclair/typebox").TObject<{
                    mode: import("@sinclair/typebox").TUnsafe<"sync" | "async">;
                }> | import("@sinclair/typebox").TObject<{
                    mode: import("@sinclair/typebox").TUnsafe<"sync" | "async">;
                    event: import("@sinclair/typebox").TString;
                }> | import("@sinclair/typebox").TObject<{
                    mode: import("@sinclair/typebox").TUnsafe<"sync" | "async">;
                    path: import("@sinclair/typebox").TString;
                    method: import("@sinclair/typebox").TUnsafe<"GET" | "POST" | "PATCH" | "PUT" | "DELETE">;
                    response_type: import("@sinclair/typebox").TUnsafe<"json" | "text" | "html">;
                }>;
            }>[]>;
            tasks: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TObject<{
                type: import("@sinclair/typebox").TLiteral<"log" | "fetch" | "render" | "subflow">;
                params: import("@sinclair/typebox").TObject<{
                    url: import("@sinclair/typebox").TString;
                    method: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnion<[{
                        title: string;
                    } & import("@sinclair/typebox").TUnsafe<string>, import("@sinclair/typebox").TString]>, string>>;
                    headers: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnion<[{
                        title: string;
                    } & import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
                        key: import("@sinclair/typebox").TString;
                        value: import("@sinclair/typebox").TString;
                    }>>, import("@sinclair/typebox").TString]>, {
                        key: string;
                        value: string;
                    }[]>>;
                    body: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnion<[{
                        title: string;
                    } & import("@sinclair/typebox").TString, import("@sinclair/typebox").TString]>, string>>;
                    normal: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnion<[{
                        title: string;
                    } & import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TString]>, number>>;
                }> | import("@sinclair/typebox").TObject<{
                    delay: import("@sinclair/typebox").TNumber;
                }> | import("@sinclair/typebox").TObject<{
                    render: import("@sinclair/typebox").TString;
                }> | import("@sinclair/typebox").TObject<{
                    flow: import("@sinclair/typebox").TAny;
                    input: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TUnion<[{
                        title: string;
                    } & import("@sinclair/typebox").TAny, import("@sinclair/typebox").TString]>, any>>;
                    loop: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
                }>;
            }>[]>>>;
            connections: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
                source: import("@sinclair/typebox").TString;
                target: import("@sinclair/typebox").TString;
                config: import("@sinclair/typebox").TObject<{
                    condition: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
                        type: import("@sinclair/typebox").TLiteral<"success">;
                    }>, import("@sinclair/typebox").TObject<{
                        type: import("@sinclair/typebox").TLiteral<"error">;
                    }>, import("@sinclair/typebox").TObject<{
                        type: import("@sinclair/typebox").TLiteral<"matches">;
                        path: import("@sinclair/typebox").TString;
                        value: import("@sinclair/typebox").TString;
                    }>]>>;
                    max_retries: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
                }>;
            }>>>;
            start_task: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
            responding_task: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
        }>>;
    }>;
    private getFlowInfo;
    build(): Promise<void>;
    toJSON(): (ReturnType<this["getSchema"]> & {
        params: [];
    })["static"] & {
        flows: {
            [x: string]: {
                trigger: {
                    type: string;
                    config: {
                        mode: "sync" | "async";
                    };
                };
                tasks: {
                    [k: string]: {
                        type: string;
                        params: {
                            [x: string]: unknown;
                            [x: number]: unknown;
                        };
                    };
                };
                connections: {
                    [k: string]: {
                        source: string;
                        target: string;
                        config: {
                            condition: {
                                type: "success" | "error" | "matches";
                                path: string | undefined;
                                value: any;
                            } | undefined;
                            max_retries?: number;
                        };
                    };
                };
                start_task: string;
                responding_task: string | undefined;
            };
        };
    };
}
