import { RuleAction, RuleExecutor } from "./serde";
/**
 * RuleOverride represents a rule override
 */
export interface RuleOverride {
    type: string;
    onSuccess?: string;
    onFailure?: string;
    disabled?: boolean;
}
/**
 * RuleRegistry is used to register and fetch rule executors and actions.
 */
export declare class RuleRegistry {
    private ruleExecutors;
    private ruleActions;
    private ruleOverrides;
    private static globalInstance;
    /**
     * registerExecutor is used to register a new rule executor.
     * @param ruleExecutor - the rule executor to register
     */
    registerExecutor(ruleExecutor: RuleExecutor): void;
    /**
     * getExecutor fetches a rule executor by a given name.
     * @param name - the name of the rule executor to fetch
     */
    getExecutor(name: string): RuleExecutor | undefined;
    /**
     * getExecutors fetches all rule executors
     */
    getExecutors(): RuleExecutor[];
    /**
     * registerAction is used to register a new rule action.
     * @param ruleAction - the rule action to register
     */
    registerAction(ruleAction: RuleAction): void;
    /**
     * getAction fetches a rule action by a given name.
     * @param name - the name of the rule action to fetch
     */
    getAction(name: string): RuleAction | undefined;
    /**
     * getActions fetches all rule actions
     */
    getActions(): RuleAction[];
    /**
     * registerOverride is used to register a new rule override.
     * @param ruleOverride - the rule override to register
     */
    registerOverride(ruleOverride: RuleOverride): void;
    /**
     * getOverride fetches a rule override by a given name.
     * @param name - the name of the rule override to fetch
     */
    getOverride(name: string): RuleOverride | undefined;
    /**
     * getOverrides fetches all rule overrides
     */
    getOverrides(): RuleOverride[];
    /**
     * clear clears all registered rules
     */
    clear(): void;
    /**
     * getGlobalInstance fetches the global instance of the rule registry
     */
    static getGlobalInstance(): RuleRegistry;
    /**
     * registerRuleExecutor is used to register a new rule executor globally.
     * @param ruleExecutor - the rule executor to register
     */
    static registerRuleExecutor(ruleExecutor: RuleExecutor): void;
    /**
     * registerRuleAction is used to register a new rule action globally.
     * @param ruleAction - the rule action to register
     */
    static registerRuleAction(ruleAction: RuleAction): void;
    /**
     * registerRuleOverride is used to register a new rule override globally.
     * @param ruleOverride - the rule override to register
     */
    static registerRuleOverride(ruleOverride: RuleOverride): void;
}
