import { ConditionalFunc, Edge, SimpleMachineConfig } from "./types.js";
import { StatelogClient } from "../statelogClient.js";
export declare class GoToNode<T> {
    to: string;
    data: T;
    constructor(to: string, data: T);
}
export declare function goToNode<T>(to: string, data: T): GoToNode<T>;
export declare class SimpleMachine<T> {
    private nodes;
    private edges;
    private config;
    private statelogClient;
    constructor(config?: SimpleMachineConfig<T>);
    node(id: string, func: (data: T) => Promise<T | GoToNode<T>>): void;
    edge(from: string, to: string): void;
    conditionalEdge<const Adjacent extends string>(from: string, adjacentNodes: readonly Adjacent[], to?: ConditionalFunc<T, Adjacent>): void;
    debug(message: string, data?: T): void;
    run(startId: string, input: T, options?: {
        onNodeEnter?: (id: string) => void;
        statelogClient?: StatelogClient;
    }): Promise<T>;
    runAndValidate(nodeFunc: (data: T) => Promise<T | GoToNode<T>>, currentId: string, _data: T, retries?: number): Promise<T | GoToNode<T>>;
    prettyPrint(): void;
    prettyPrintEdge(edge: Edge<T, string>): string;
    toMermaid(): string;
    merge(another: SimpleMachine<T>): void;
    toJSON(): {
        nodes: string[];
        edges: Record<string, string[]>;
        config: {
            debug: {
                log?: boolean;
                logData?: boolean;
            } | undefined;
        };
    };
    private validateGoToNodeTarget;
}
