import * as Promise from 'bluebird';
export declare type RollbackAction = () => void | Promise<void>;
export declare type HookFn = (...args: any[]) => any;
export declare class Hook {
    private hookFn;
    constructor(hookFn: HookFn);
    run(...args: any[]): Promise<any>;
}
export declare class SideEffectHook extends Hook {
    private rollbackFns;
    private rolledBack;
    constructor(hookFn: HookFn);
    registerRollback(fn: RollbackAction): void;
    rollback(): Promise<void> | undefined;
}
export declare const rollbackRequestHooks: (request: any) => Promise<(void | Error)[]> | Promise<(Error | (void | Error)[])[]>;
export declare const instantiateHooks: (hooks: any) => {
    [x: string]: Hook[];
};
