declare const USERNAME_REQUIRED = "username is required";
declare const ALTERUSER_NOTHING_TO_UPDATE = "nothing to update, must supply active, role or password to update";
declare const EMPTY_PASSWORD = "password cannot be an empty string";
declare const EMPTY_ROLE = "If role is specified, it cannot be empty.";
declare const ACTIVE_BOOLEAN = "active must be true or false";
export { addUser, alterUser, dropUser, getSuperUser, userInfo, listUsers, listUsersExternal, setUsersWithRolesCache, findAndValidateUser, getUsersWithRolesCache, USERNAME_REQUIRED, ALTERUSER_NOTHING_TO_UPDATE, EMPTY_PASSWORD, EMPTY_ROLE, ACTIVE_BOOLEAN, };
export interface User {
    active?: boolean;
    username: string;
    role?: UserRole;
    __updatedtime__?: number;
    __createdtime__?: number;
    [other: string]: unknown;
}
export interface UserRole {
    permission: UserRoleNamedPermissions & UserRoleDatabasePermissions;
    role: string;
    id: string;
    __updatedtime__: number;
    __createdtime__: number;
}
export interface UserRoleNamedPermissions extends Partial<CRUDPermissions> {
    super_user?: boolean;
    cluster_user?: boolean;
    structure_user?: boolean | string[];
    operations?: string[];
    /** Pre-expanded Set built from operations at cache-load time. Not persisted. */
    _expandedOperations?: Set<string>;
}
export interface UserRoleDatabasePermissions {
    [databaseName: string]: UserRoleSchemaRecord;
}
export interface UserRoleSchemaRecord extends Partial<CRUDPermissions> {
    tables: Record<string, UserRolePermissionTable | UserLegacyRolePermissionTable>;
}
export interface UserRolePermissionTable extends CRUDPermissions {
    attribute_permissions: UserRoleAttributePermissionTable[];
}
export interface UserRoleAttributePermissionTable extends Omit<CRUDPermissions, 'delete'> {
    attribute_name: string;
}
export interface UserLegacyRolePermissionTable extends CRUDPermissions {
    attribute_restrictions: UserLegacyRoleAttributePermissionTable[];
}
export interface UserLegacyRoleAttributePermissionTable extends CRUDPermissions {
    attribute_name: string;
}
export interface CRUDPermissions {
    read: boolean;
    insert: boolean;
    update: boolean;
    delete: boolean;
}
declare function addUser(user: User | any): Promise<string>;
declare function alterUser(jsonMessage: any): Promise<any>;
declare function dropUser(user: User | any): Promise<string>;
declare function userInfo(body: any): Promise<string | User>;
/**
 * This function should be called by chooseOperation as it scrubs sensitive information before returning
 * the results of list users.
 */
declare function listUsersExternal(): Promise<User[]>;
/**
 * Queries system table for user records, adds role-based perms, scrubs list based on licensed role allowance and returns
 * data in a Map with the username as the key for the entry
 */
declare function listUsers(): Promise<Map<string, User>>;
declare function setUsersWithRolesCache(cache?: any): Promise<void>;
declare function getUsersWithRolesCache(): Promise<any>;
/**
 * iterates global.hdb_users to find and validate the username & optionally the password as well as if they are active.
 * @param {string} username
 * @param {string} pw
 * @param {boolean} validatePassword
 */
declare function findAndValidateUser(username: string, pw?: string | null, validatePassword?: boolean): Promise<User>;
declare function getSuperUser(): Promise<User | undefined>;
