import type { WorkflowDefinition } from "@restatedev/restate-sdk";
import * as restate from "@restatedev/restate-sdk";
import type { BaseClientMethods, TransformWorkflowHandler, TransformWorkflowSharedHandler, TypedClear, TypedGet, TypedRun, TypedSet } from "./common-types";
export type WorkflowHandlerContext<TState> = {
    clearState: TypedClear<TState>;
    ctx: restate.WorkflowContext;
    getState: TypedGet<TState>;
    runStep: TypedRun;
    setState: TypedSet<TState>;
} & BaseClientMethods;
export type WorkflowSharedHandlerContext<TState> = {
    ctx: restate.WorkflowSharedContext;
    getState: TypedGet<TState>;
    runStep: TypedRun;
} & BaseClientMethods;
type TransformRunHandler<TState, THandler> = TransformWorkflowHandler<WorkflowHandlerContext<TState>, THandler>;
type TransformSharedHandlers<TState, THandlers> = {
    [K in keyof THandlers]: TransformWorkflowSharedHandler<WorkflowSharedHandlerContext<TState>, THandlers[K]>;
};
type CombineHandlers<TRunHandler, TSharedHandlers> = {
    run: TRunHandler;
} & TSharedHandlers;
export declare function createRestateWorkflow<TState>(name: string, SerdeClass: new <T>() => restate.Serde<T>): <THandlers extends { [K in Exclude<keyof THandlers, "run">]: (context: WorkflowSharedHandlerContext<TState>, ...args: any[]) => Promise<any>; } & {
    run: (context: WorkflowHandlerContext<TState>, ...args: any[]) => Promise<any>;
}>(inputHandlers: THandlers) => WorkflowDefinition<string, CombineHandlers<TransformRunHandler<TState, THandlers["run"]>, TransformSharedHandlers<TState, Omit<THandlers, "run">>>>;
export { createRestateWorkflow as typedWorkflow };
//# sourceMappingURL=typed-workflow.d.ts.map