type Subscriber = (message: Update) => void;
type Unsubscribe = () => void;
interface PartialTaskPayload {
    task_args?: any[];
    task_kwargs?: Record<string, any>;
    prerun_handler_args?: any[];
    prerun_handler_kwargs?: Record<string, any>;
    postrun_handler_args?: any[];
    postrun_handler_kwargs?: Record<string, any>;
}
interface CreateTaskOptions {
    taskName: string;
    taskPayload?: PartialTaskPayload;
    queue?: string;
    retryOnFailure?: boolean;
    retryLimit?: number;
}
type TaskPayload = {
    task_args: any[];
    task_kwargs: Record<string, any>;
    prerun_handler_args: any[];
    prerun_handler_kwargs: Record<string, any>;
    postrun_handler_args: any[];
    postrun_handler_kwargs: Record<string, any>;
};
declare enum TaskStatus {
    PENDING = "PENDING",
    RUNNING = "RUNNING",
    SUCCESS = "SUCCESS",
    FAILURE = "FAILURE",
    INVALID = "INVALID",
    CANCELLED = "CANCELLED"
}
declare enum PeonStatus {
    IDLE = "IDLE",
    PREPARING = "PREPARING",
    WORKING = "WORKING",
    OFFLINE = "OFFLINE"
}
type Task = {
    id: string;
    task_name: string;
    status: TaskStatus;
    created_at: Date;
    updated_at: Date;
    worker_id: string | null;
    queue: string;
    payload: TaskPayload;
    result: any | null;
    retry_on_failure: boolean;
    retry_count: number;
    retry_limit: number;
};
type Peon = {
    id: string;
    status: PeonStatus;
    last_heartbeat: Date;
    current_task: string | null;
    queues: string;
};
declare enum UpdateType {
    TASK_UPDATE = "task_update",
    PEON_UPDATE = "peon_update"
}
type Update = {
    type: UpdateType;
    message: {
        task?: Task;
        peon?: Peon;
    };
};
type WorkcraftConfig = {
    strongholdUrl: string;
    apiKey: string;
};
declare class WorkcraftClient {
    private config;
    private strongholdUrl;
    private apiKey;
    private fetchWithApiKey;
    private sse;
    private subscribers;
    private reconnectDelay;
    constructor(config: WorkcraftConfig);
    private createJWT;
    private setupSSE;
    private notifySubscribers;
    subscribe(callback: Subscriber): Promise<Unsubscribe>;
    disconnect(): Promise<void>;
    init(): Promise<void>;
    deleteTaskOrThrow(taskId: string): Promise<any>;
    createTaskOrThrow({ taskName, taskPayload, queue, retryOnFailure, retryLimit, }: CreateTaskOptions): Promise<Task | null>;
    getTaskByIdOrThrow(id: string): Promise<Task>;
    getPeonByIdOrThrow(id: string): Promise<Peon>;
    cancelTaskOrThrow(id: string): Promise<void>;
}

export { type CreateTaskOptions, type PartialTaskPayload, type Peon, PeonStatus, type Task, type TaskPayload, TaskStatus, type Update, UpdateType, WorkcraftClient, type WorkcraftConfig };
