import { Client } from ".";
export declare type UserData = {
    id: string | null;
    display_name: string | null;
    api_level: "ADMINISTRATOR" | "PROJECT" | "DEFAULT";
    mfa_enabled: boolean;
    project: ProjectData | null;
    email_verified: boolean;
    services: {
        name: string;
        data: {
            [key: string]: any;
        };
    }[];
    connections: {
        name: string;
        user: {
            id: string;
            display_name: string;
        };
    }[];
};
export declare type ProjectData = {
    owner_id: string;
    client_id: string;
    client_secret: string;
    redirect_uris: string[];
    email_verified: boolean;
};
export declare type PartialUser = {
    id?: string;
    display_name?: string | null;
};
export default class User {
    id: UserData['id'];
    display_name: string | undefined;
    api_level: UserData['api_level'];
    mfa_enabled: UserData['mfa_enabled'];
    services: UserData['services'];
    connections: UserData['connections'];
    project: UserData['project'];
    email_verified: UserData['email_verified'];
    client: Client;
    constructor(client: Client, user_data: UserData);
    /**
     * Returns a service and its data
     * @param service Service name
     * @returns Service data
     */
    get_service(service: string): {
        name: string;
        data: {
            [key: string]: any;
        };
    } | null;
    /**
     * Returns a connection and its data
     * @param connection Connection data
     * @returns Connection data
     */
    get_connection(connection: string): {
        name: string;
        user: {
            id: string;
            display_name: string;
        };
    } | null;
    /**
     * Updates an owned service's data for a user
     * @param name Service name, must be owned
     * @param data Updated service structure
     * @returns Resolution result
     */
    setService(name: string, data: {
        [key: string]: any;
    }): Promise<void>;
    /**
     * Updates User's role
     * * Requires access to the 'MODIFY_ROLES' permission.
     * @param role New role
     * @returns Updated User
     */
    setRole(role: User['api_level']): Promise<void>;
}
//# sourceMappingURL=user.d.ts.map