import { Module, StringMap } from "@intuitionrobotics/ts-common";
import { ServerApi_Middleware } from "@intuitionrobotics/thunderstorm/backend";
import { Base_AccessLevels, DB_PermissionAccessLevel, DB_PermissionApi, DB_PermissionsGroup, DB_PermissionsUser, User_Group } from "../..";
export type UserCalculatedAccessLevel = {
    [domainId: string]: number;
};
export type GroupPairWithBaseLevelsObj = {
    accessLevels: Base_AccessLevels[];
    customFields: StringMap[];
};
export type RequestPairWithLevelsObj = {
    accessLevels: DB_PermissionAccessLevel[];
    customFields: StringMap[];
};
type Config = {
    strictMode?: boolean;
};
export declare class PermissionsAssert_Class extends Module<Config> {
    constructor();
    readonly Middleware: (keys: string[]) => ServerApi_Middleware;
    readonly CustomMiddleware: (keys: string[], action: (projectId: string, customFields: StringMap) => Promise<void>) => ServerApi_Middleware;
    assertUserPermissions(projectId: string, path: string, userId: string, requestCustomField: StringMap): Promise<void>;
    _assertUserPermissionsImpl(apiDetails: {
        apiDb: DB_PermissionApi;
        requestPermissions: DB_PermissionAccessLevel[];
    }, projectId: string, userDetails: {
        user: DB_PermissionsUser;
        userGroups: DB_PermissionsGroup[];
    }, requestCustomField: StringMap): void;
    assertUserSharingGroup(granterUserId: string, userGroup: User_Group): Promise<void>;
    assertUserPermissionsImpl(userGroups: DB_PermissionsGroup[], requestPermissions: DB_PermissionAccessLevel[], requestCustomFields: StringMap[]): void;
    getUserDetails(uuid: string): Promise<{
        user: DB_PermissionsUser;
        userGroups: DB_PermissionsGroup[];
    }>;
    private getCombineUserGroupCF;
    private getCombineUserGroups;
    getApiDetails(_path: string, projectId: string): Promise<{
        apiDb: DB_PermissionApi;
        requestPermissions: DB_PermissionAccessLevel[];
    }>;
    getApisDetails(urls: string[], projectId: string): Promise<({
        apiDb: DB_PermissionApi;
        requestPermissions: DB_PermissionAccessLevel[];
    } | undefined)[]>;
    private getAccessLevels;
    isMatchWithLevelsObj(groupPair: GroupPairWithBaseLevelsObj, requestPair: RequestPairWithLevelsObj): boolean;
    private getDomainLevelMap;
    doesCustomFieldsSatisfies(groupCustomFields: StringMap[] | undefined, requestCustomField: StringMap): boolean;
    private doesCustomFieldSatisfies;
    private getRegEx;
}
export declare const PermissionsAssert: PermissionsAssert_Class;
export {};
