import type { ActionContext, ComponentRegistry, ConfigVarResultCollection, ErrorHandler, Inputs, PollingContext, PollingTriggerDefinition, PollingTriggerPerformFunction, TriggerPayload, TriggerPerformFunction, TriggerReference, TriggerResult } from "../types";
import type { ComponentReference as ServerComponentReference } from "./integration";
import type { CNIPollingPerformFunction, ComponentRefTriggerPerformFunction } from "./triggerTypes";
export type PerformFn = (...args: any[]) => Promise<any>;
interface CreatePollingContext {
    context: ActionContext;
    invokeAction: PollingContext["polling"]["invokeAction"];
}
export declare const createPollingContext: ({ context, invokeAction, }: CreatePollingContext) => Pick<PollingContext, "polling">;
export type CleanFn = (...args: any[]) => any;
export type InputCleaners = Record<string, CleanFn | undefined>;
interface CreatePerformProps {
    inputCleaners: InputCleaners;
    errorHandler?: ErrorHandler;
}
export declare const cleanParams: (params: Record<string, unknown>, cleaners: InputCleaners) => Record<string, unknown>;
export declare const createPerform: (performFn: PerformFn, { inputCleaners, errorHandler }: CreatePerformProps) => PerformFn;
export declare const createPollingPerform: <TInputs extends Inputs, TActionInputs extends Inputs, TConfigVars extends ConfigVarResultCollection = ConfigVarResultCollection, TPayload extends TriggerPayload = TriggerPayload, TAllowsBranching extends boolean = boolean, TResult extends TriggerResult<TAllowsBranching, TPayload> = TriggerResult<TAllowsBranching, TPayload>>(trigger: PollingTriggerDefinition<any, ConfigVarResultCollection, TriggerPayload, boolean, any, any>, { inputCleaners, errorHandler }: CreatePerformProps) => PollingTriggerPerformFunction<TInputs, TActionInputs, TConfigVars, TPayload, TAllowsBranching, TResult>;
type CreateCNIPollingPerform<TInputs extends Inputs, TActionInputs extends Inputs, TConfigVars extends ConfigVarResultCollection = ConfigVarResultCollection, TPayload extends TriggerPayload = TriggerPayload, TAllowsBranching extends boolean = boolean, TResult extends TriggerResult<TAllowsBranching, TPayload> = TriggerResult<TAllowsBranching, TPayload>> = {
    componentRegistry: ComponentRegistry;
    onTrigger: PollingTriggerPerformFunction<TInputs, TActionInputs, TConfigVars, TPayload, TAllowsBranching, TResult>;
};
export declare const createCNIPollingPerform: <TInputs extends Inputs, TActionInputs extends Inputs, TConfigVars extends ConfigVarResultCollection = ConfigVarResultCollection, TPayload extends TriggerPayload = TriggerPayload, TAllowsBranching extends boolean = boolean, TResult extends TriggerResult<TAllowsBranching, TPayload> = TriggerResult<TAllowsBranching, TPayload>>({ onTrigger, componentRegistry, }: CreateCNIPollingPerform<TInputs, TActionInputs, TConfigVars, TPayload, TAllowsBranching, TResult>) => CNIPollingPerformFunction<TInputs, TConfigVars, TPayload, TAllowsBranching>;
interface CreateCNIComponentRefPerform {
    componentRef: ServerComponentReference;
    componentRegistry: ComponentRegistry;
    onTrigger: TriggerReference;
}
export declare const createCNIComponentRefPerform: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection>({ componentRegistry, componentRef, onTrigger, }: CreateCNIComponentRefPerform) => ComponentRefTriggerPerformFunction<TInputs, TConfigVars>;
interface CreateCNIPerform<TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean | undefined, TResult extends TriggerResult<TAllowsBranching, TriggerPayload>> {
    componentRegistry: ComponentRegistry;
    onTrigger: TriggerPerformFunction<TInputs, TConfigVars, TAllowsBranching, TResult>;
}
export declare const createCNIPerform: <TInputs extends Inputs, TConfigVars extends ConfigVarResultCollection, TAllowsBranching extends boolean | undefined, TResult extends TriggerResult<TAllowsBranching, TriggerPayload>>({ componentRegistry, onTrigger, }: CreateCNIPerform<TInputs, TConfigVars, TAllowsBranching, TResult>) => TriggerPerformFunction<TInputs, TConfigVars, TAllowsBranching, TResult>;
export {};
