import { Observable, Subject } from 'rxjs';
import { AjaxError, AjaxRequest } from 'rxjs/ajax';
import { CimStreamOptions, CimStreamResponse } from '../data/cim-stream';
import { HttpStatusCode } from '../data/http-constants';
import { PowerShellStreamResponse } from '../data/powershell-stream';
/**
 * Defines an signed http request token
 */
export interface SignedHttpRequestToken {
    /**
     * JSON Web Token (string).
     */
    jwt: string;
    /**
     * User name.
     */
    username: string;
}
export interface SignOnTokenResponse {
    /**
     * The time aquired.
     */
    time: number;
    /**
     * The signed http request token.
     */
    token: SignedHttpRequestToken;
}
export interface SignOnTokenRefresh {
    /**
     * The time aquired.
     */
    time: number;
}
/**
 * Manage Signed HTTP Request token (Proof of possession token) handling.
 */
export declare class SignOnManager {
    /**
     * Wait for one minute to respond by the portal.
     */
    private portalMaxWaitTimeout;
    /**
     * The PoP Authorization Token.
     */
    signedHttpRequestToken: SignedHttpRequestToken;
    /**
     * The sign on token awaiter subject.
     */
    signOnTokenAwaiter: Subject<SignOnTokenResponse>;
    /**
     * The sign on token requester subject.
     */
    private signOnTokenRefresh;
    /**
     * The refresh request to the authorization manager.
     */
    private refreshCall;
    /**
     * Initializes a new instance of the SignOnManager class.
     */
    constructor(refreshCall: () => Observable<SignOnTokenResponse>);
    /**
     * Gets a valude indicating whethere sign on token is active and configured.
     */
    get isSignOnTokenEnabled(): boolean;
    /**
     * Gets the sign on token request observable by Shell.
     */
    get signOnTokenRefreshTarget(): Observable<SignOnTokenRefresh>;
    /**
     * Apply signed http request token.
     */
    applySignedHttpRequestToken(token: SignedHttpRequestToken): void;
    /**
     * Request sign on token to refresh.
     * @returns success void.
     */
    requestSignOnRefresh(): Observable<SignOnTokenResponse>;
    /**
     * Check if it can handle unauthorized login case.
     * @param code the error code.
     * @param error the ajax error response.
     * @returns true if it can handle.
     */
    canHandleUnauthorizedLogin(code: HttpStatusCode, error: AjaxError): boolean;
    /**
     * Handles the unauthorized login case.
     * @param code the error code.
     * @param request the ajax request.
     * @param error the ajex error reponse.
     * @returns success if it could handled.
     */
    handleUnauthorizedLogin(code: HttpStatusCode, request: AjaxRequest, error: AjaxError): Observable<AjaxRequest>;
    /**
     * Check if it can handle unauthorized login case.
     * @param response the response of CIM stream query.
     */
    canHandleStreamUnauthorizedLogin(response: CimStreamResponse): boolean;
    /**
     * Handle returns true for an ajax error, this method can be called to handle that error.
     */
    handleStreamUnauthorizedLogin(options: CimStreamOptions, response: CimStreamResponse | PowerShellStreamResponse): Observable<CimStreamOptions>;
    /**
     * Set AAD authorization header.
     * @param headers the headers.
     */
    SetAadAuthorizationHeader(headers?: any): void;
}
