import { Server } from "../Server";
import { ConfigurableServiceBase, ConfigurableServiceConfig } from "./ConfigurableServiceBase";
export interface IPermissionChangeRequest {
    condition: Realm.Sync.PermissionCondition;
    realmPath: string;
    accessLevel: Realm.Sync.AccessLevel;
}
export interface PermissionsServiceConfig extends ConfigurableServiceConfig {
    enablePermissionRealmReflection?: boolean;
    enableManagementRealmReflection?: boolean;
}
export declare class PermissionsService extends ConfigurableServiceBase<PermissionsServiceConfig> {
    private static MANAGEMENT_REALM_REGEX;
    private static ADMIN_REALM_REGEX;
    private enablePermissionRealmReflection;
    private enableManagementRealmReflection;
    private adminRealm;
    private wildcardPermissionRealm;
    private logger;
    private handleManagementChangeCallback;
    private handleAdminChangeCallback;
    private pendingHandlerCallbacks;
    private static ensureInTransaction;
    constructor(config?: PermissionsServiceConfig);
    protected setConfigCore(config?: PermissionsServiceConfig): void;
    private getManagementRealmForUserId;
    private getUserSpecificPermissionRealm;
    protected startCore(server: Server): Promise<void>;
    private setupHandlers;
    private stopping;
    protected stopCore(): Promise<void>;
    private onDemand;
    private applyPermissions;
    private getOffers;
    private offerPermissions;
    private invalidatePermissionOffer;
    private acceptPermissionOffer;
    private getGrantedPermissions;
    private unreflectPermissionIn;
    private reflectPermissionIn;
    private getUserIdsWithMetadata;
    private grantReadOnlyAccessToWildcardPermissionRealm;
    private grantReadWriteOnUserPermissionRealms;
    private applyPermissionChangeInAdminRealm;
    private handleAdminRealmChange;
    private handleManagementRealmChange;
    private handleGNCallback;
    private handlePermissionOfferObject;
    private handlePermissionOfferResponseObject;
    private handlePermissionChangeObject;
    private validateUserIdCanChangePermissionsForPath;
}
