import { FirebasePathAccessRights } from './FirebasePathAccessRights';
import { FirebaseRulesContext } from './FirebaseRulesContext';
import { FirestoreRulesClosure } from './FirestoreRuleClosure';
import { MockFirestoreRequest } from './MockFirestoreRequest';
import { MockFirestoreResource } from './MockFirestoreResource';
import { MatchPattern } from './utils/patternMatch';
export declare type AllowKey = 'create' | 'read' | 'write' | 'update' | 'list' | 'delete';
export interface AllowRule {
    pattern: MatchPattern;
    allowKeys: AllowKey[];
    if: ExpressionCallback;
}
export declare type ExpressionCallback = (context: ExtendedFirebaseRulesContext, closure: FirestoreRulesClosure) => any;
interface ExtendedFirebaseRulesContext extends FirebaseRulesContext {
    exit: boolean;
    hasAccess: {
        create?: boolean;
        read?: boolean;
        write?: boolean;
        update?: boolean;
        list?: boolean;
        delete?: boolean;
    };
    path: string;
}
export interface FirestoreRulesFunctionDescriptor {
    callback: (context: FirebaseRulesContext, closure: FirestoreRulesClosure, self?: any) => any;
    argNames: string[];
}
export declare const defaultFirebaseRulesContext: Partial<FirebaseRulesContext>;
/**
 * Create a default firebare rule context to be used when calling rules rights.
 *
 * Function uses deep merge, so you can set needed values in sub objects like,
 *  ```typescript
 * createFirebaseRulesContext({
 *   auth: {
 *     uid: '123'
 *   }
 * });
 * ```
 * This will override only the uid property and will leave other properties intact.
 *
 * @export
 * @param {Partial<FirebaseRulesContext>} [overrides] Values, to be overrided from default values.
 * @param {boolean} authenticated When true, a default mock user info is given for context. Default value is `false`.
 * @returns {FirebaseRulesContext}
 */
export declare function createFirebaseRulesContext(overrides?: Partial<FirebaseRulesContext>, authenticated?: boolean): FirebaseRulesContext;
/**
 * Firebase Rules Intepreter testing user rights based on rules script
 */
export declare class FirebaseRulesIntepreter {
    private _parser;
    request: MockFirestoreRequest;
    resource: MockFirestoreResource;
    /**
     * Get the namespace used in rules -file
     *
     * @readonly
     * @memberof RulesParser
     */
    readonly namespace: string;
    constructor();
    init: (rulesFile: string) => FirebaseRulesIntepreter;
    /**
     * Elaborate access rights for given path within given context
     *
     * @memberof RulesParser
     */
    hasAccess: (path: string, context: FirebaseRulesContext) => FirebasePathAccessRights;
}
export {};
