import { AbstractInterceptor, type PropertyKey } from './abstract.interceptors';
export declare class TransactionInterceptor extends AbstractInterceptor {
    private static _instance;
    /**
     * Implement Proxy handler get method to provide transactional nature for repositories.
     *
     * The transaction environment is defined as:
     *
     * ```javascript
     *  try {
     *    obj.beginTransaction();
     *    const answer = Reflect.get(obj, prop);
     *    obj.completeTransaction();
     *    return answer;
     *  } catch(e) {
     *    logger.error('unable to complete transaction, rolling-back', e);
     *    obj.rollbackTransaction();
     *  } finally {
     *    obj.cleanupTransactionResources();
     *  }
     * ```
     * As such  beginTransaction, completeTransaction, rollbackTransaction and eventually cleanupTransactionResources
     * should be implemented.
     *
     * * @param {Injectable} obj The target of this proxy
     * @param {String} prop the method or property name to access
     * @returns {Any}
     *
     * @public
     */
    intercept(obj: any, prop: PropertyKey): any;
    isApplicable(obj: any, prop: PropertyKey): boolean;
    completeTransaction(resolve: any, obj: any, response: any): Promise<void>;
    rollbackTransaction(reject: any, obj: any, e: any): Promise<void>;
    static create(): TransactionInterceptor;
}
