import { UserConfigSkeleton, UserGroupSkeleton, UserSkeleton } from '../api/UserApi';
import { State } from '../shared/State';
import { ExportMetaData } from './OpsTypes';
export type User = {
    /**
     * Create an empty user export template
     * @returns {UserExportInterface} an empty user export template
     */
    createUserExportTemplate(): UserExportInterface;
    /**
     * Read user by id
     * @param {string} userId User id
     * @returns {Promise<UserSkeleton>} a promise that resolves to a user object
     */
    readUser(userId: string): Promise<UserSkeleton>;
    /**
     * Read all users.
     * @returns {Promise<UserSkeleton[]>} a promise that resolves to an array of user objects
     */
    readUsers(): Promise<UserSkeleton[]>;
    /**
     * Export a single user by id. The response can be saved to file as is.
     * @param {string} userId User id
     * @returns {Promise<UserExportInterface>} Promise resolving to a UserExportInterface object.
     */
    exportUser(userId: string): Promise<UserExportInterface>;
    /**
     * Export all users. The response can be saved to file as is.
     * @returns {Promise<UserExportInterface>} Promise resolving to a UserExportInterface object.
     */
    exportUsers(): Promise<UserExportInterface>;
    /**
     * Create an empty user group export template
     * @returns {UserGroupExportInterface} an empty user group export template
     */
    createUserGroupExportTemplate(): UserGroupExportInterface;
    /**
     * Read user group by id
     * @param {string} groupId Group id
     * @returns {Promise<UserGroupSkeleton>} a promise that resolves to a user group object
     */
    readUserGroup(groupId: string): Promise<UserGroupSkeleton>;
    /**
     * Read all user groups.
     * @returns {Promise<UserGroupSkeleton[]>} a promise that resolves to an array of user group objects
     */
    readUserGroups(): Promise<UserGroupSkeleton[]>;
    /**
     * Export a single user group by id. The response can be saved to file as is.
     * @param {string} groupId Group id
     * @returns {Promise<UserGroupExportInterface>} Promise resolving to a UserGroupExportInterface object.
     */
    exportUserGroup(groupId: string): Promise<UserGroupExportInterface>;
    /**
     * Export all user groups. The response can be saved to file as is.
     * @returns {Promise<UserGroupExportInterface>} Promise resolving to a UserGroupExportInterface object.
     */
    exportUserGroups(): Promise<UserGroupExportInterface>;
    /**
     * Import users and their config
     * @param {UserExportInterface} importData user import data
     * @param {string} userId Optional user id. If supplied, only the user of that id is imported.
     * @returns {Promise<UserExportSkeleton[]>} the imported users
     */
    importUsers(importData: UserExportInterface, userId?: string): Promise<UserExportSkeleton[]>;
    /**
     * Import user groups
     * @param {UserGroupExportInterface} importData user group import data
     * @param {string} groupId Optional user group id. If supplied, only the group of that id is imported.
     * @returns {Promise<UserGroupSkeleton[]>} the imported user groups
     */
    importUserGroups(importData: UserGroupExportInterface, groupId?: string): Promise<UserGroupSkeleton[]>;
};
declare const _default: (state: State) => User;
export default _default;
export type UserExportSkeleton = UserSkeleton & {
    config: UserConfigSkeleton;
};
export interface UserExportInterface {
    meta?: ExportMetaData;
    user: Record<string, UserExportSkeleton>;
}
export interface UserGroupExportInterface {
    meta?: ExportMetaData;
    userGroup: Record<string, UserGroupSkeleton>;
}
/**
 * Create an empty user export template
 * @returns {UserExportInterface} an empty user export template
 */
export declare function createUserExportTemplate({ state, }: {
    state: State;
}): UserExportInterface;
/**
 * Read user by id
 * @param {string} userId User id
 * @returns {Promise<UserSkeleton>} a promise that resolves to a user object
 */
export declare function readUser({ userId, state, }: {
    userId: string;
    state: State;
}): Promise<UserSkeleton>;
/**
 * Read all users.
 * @returns {Promise<UserSkeleton[]>} a promise that resolves to an array of user objects
 */
export declare function readUsers({ state, }: {
    state: State;
}): Promise<UserSkeleton[]>;
/**
 * Export a single user by id. The response can be saved to file as is.
 * @param {string} userId User id
 * @returns {Promise<UserExportInterface>} Promise resolving to a UserExportInterface object.
 */
export declare function exportUser({ userId, state, }: {
    userId: string;
    state: State;
}): Promise<UserExportInterface>;
/**
 * Export all users. The response can be saved to file as is.
 * @returns {Promise<UserExportInterface>} Promise resolving to a UserExportInterface object.
 */
export declare function exportUsers({ state, }: {
    state: State;
}): Promise<UserExportInterface>;
/**
 * Create an empty user group export template
 * @returns {UserGroupExportInterface} an empty user group export template
 */
export declare function createUserGroupExportTemplate({ state, }: {
    state: State;
}): UserGroupExportInterface;
/**
 * Read user group by id
 * @param {string} groupId User group id
 * @returns {Promise<UserGroupSkeleton>} a promise that resolves to a user group object
 */
export declare function readUserGroup({ groupId, state, }: {
    groupId: string;
    state: State;
}): Promise<UserGroupSkeleton>;
/**
 * Read all user groups.
 * @returns {Promise<UserGroupSkeleton[]>} a promise that resolves to an array of user group objects
 */
export declare function readUserGroups({ state, }: {
    state: State;
}): Promise<UserGroupSkeleton[]>;
/**
 * Export a single user group by id. The response can be saved to file as is.
 * @param {string} groupId User group id
 * @returns {Promise<UserGroupExportInterface>} Promise resolving to a UserGroupExportInterface object.
 */
export declare function exportUserGroup({ groupId, state, }: {
    groupId: string;
    state: State;
}): Promise<UserGroupExportInterface>;
/**
 * Export all user groups. The response can be saved to file as is.
 * @returns {Promise<UserGroupExportInterface>} Promise resolving to a UserGroupExportInterface object.
 */
export declare function exportUserGroups({ state, }: {
    state: State;
}): Promise<UserGroupExportInterface>;
/**
 * Import users and their config
 * @param {UserExportInterface} importData user import data
 * @param {string} userId Optional user id. If supplied, only the user of that id is imported.
 * @returns {Promise<UserExportSkeleton[]>} the imported users
 */
export declare function importUsers({ importData, userId, state, }: {
    importData: UserExportInterface;
    userId?: string;
    state: State;
}): Promise<UserExportSkeleton[]>;
/**
 * Import user groups
 * @param {UserGroupExportInterface} importData user group import data
 * @param {string} groupId Optional user group id. If supplied, only the group of that id is imported.
 * @returns {Promise<UserGroupSkeleton[]>} the imported user groups
 */
export declare function importUserGroups({ importData, groupId, state, }: {
    importData: UserGroupExportInterface;
    groupId?: string;
    state: State;
}): Promise<UserGroupSkeleton[]>;
//# sourceMappingURL=UserOps.d.ts.map