import { IApiPayload } from "@etsoo/restclient";
import { IUser } from "../state/User";
import { BaseApi } from "./BaseApi";
import { ResultPayload } from "./dto/ResultPayload";
import { DataTypes, IActionResult } from "@etsoo/shared";
import { RefreshTokenProps, RefreshTokenResult } from "../app/IApp";
import { TokenInputRQ } from "./rq/TokenRQ";
import { ApiRefreshTokenDto } from "./dto/ApiRefreshTokenDto";
import { LoginInputAuthResult, LoginInputRQ } from "./rq/LoginRQ";
import { ResetPasswordInputRQ } from "./rq/ResetPasswordRQ";
import { SignoutRQ } from "./rq/SignoutRQ";
import { SwitchOrgRQ } from "./rq/SwitchOrgRQ";
import { AuthRequest } from "./rq/AuthRequest";
import { CheckUserIdentifierRQ } from "./rq/CheckUserIdentifierRQ";
import { AdminSupportRQ } from "./rq/AdminSupportRQ";
/**
 * Authentication API
 */
export declare class AuthApi extends BaseApi {
    /**
     * Header token field name
     */
    static HeaderTokenField: string;
    /**
     * Admin support
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    adminSupport(rq: AdminSupportRQ, payload?: IApiPayload<IActionResult<LoginInputAuthResult>>): Promise<IActionResult<LoginInputAuthResult> | undefined>;
    /**
     * API refresh token
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    apiRefreshToken(rq: TokenInputRQ, payload?: IApiPayload<ApiRefreshTokenDto>): Promise<ApiRefreshTokenDto | undefined>;
    /**
     * Authorization request
     * @param auth Authorization request data
     * @param payload Payload
     */
    authRequest(auth: AuthRequest, payload?: IApiPayload<string>): Promise<string | undefined>;
    /**
     * Change password
     * @param oldPassword Ole password
     * @param password New password
     * @param payload Payload
     * @returns Result
     */
    changePassword(oldPassword: string, password: string, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
    /**
     * Check user identifier
     * @param type User identifier type
     * @param openid Open ID
     * @param payload Payload
     * @returns Result
     */
    checkUserIdentifier(type: CheckUserIdentifierRQ["type"], openid: CheckUserIdentifierRQ["openid"], payload?: IApiPayload<DataTypes.TristateEnum>): Promise<DataTypes.TristateEnum | undefined>;
    /**
     * Exchange token
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    exchangeToken(rq: TokenInputRQ, payload?: IApiPayload<ApiRefreshTokenDto>): Promise<ApiRefreshTokenDto | undefined>;
    /**
     * Get auth request
     * @param deviceId Device ID
     * @param payload Payload
     * @param apiHost API host
     * @returns Result
     */
    getAuthRequest(deviceId?: string, payload?: IApiPayload<AuthRequest>, apiHost?: string): Promise<AuthRequest | undefined>;
    /**
     * Get log in url
     * @param deviceId Device ID
     * @param payload Payload
     * @param apiHost API host
     * @returns Result
     */
    getLogInUrl(deviceId?: string, payload?: IApiPayload<string>, apiHost?: string): Promise<string | undefined>;
    /**
     * Login
     * @param rq Request data
     * @param payload Payload
     * @param tokenKey Refresh token key
     * @returns Result
     */
    login<T extends IUser>(rq: LoginInputRQ, payload?: IApiPayload<IActionResult<T | LoginInputAuthResult>>, tokenKey?: string): Promise<[
        IActionResult<T | LoginInputAuthResult> | undefined,
        string | null
    ]>;
    /**
     * Login id check
     * @param id Check id
     * @param payload Payload
     * @returns Result
     */
    loginId(id: string, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
    /**
     * Refresh token
     * @param props Props
     * @returns Result
     */
    refreshToken<R>(props: RefreshTokenProps): Promise<RefreshTokenResult<R>>;
    /**
     * Reset password
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    resetPassword(rq: ResetPasswordInputRQ, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
    /**
     * Signout
     * @param rq Request data
     * @param payload Payload
     * @returns Result
     */
    signout(rq: SignoutRQ, payload?: ResultPayload): Promise<IActionResult<{}> | undefined>;
    /**
     * Switch organization
     * @param rq Request data
     * @param tokenKey Refresh token key
     * @param payload Payload
     */
    switchOrg<T extends IUser>(rq: SwitchOrgRQ, payload?: IApiPayload<IActionResult<T>>, tokenKey?: string): Promise<[IActionResult<T> | undefined, string | null]>;
}
