import { IServiceClient } from './Interfaces';
import { DeviceInfo, DocumentInfo, PageInfo, ParameterInfo, EmailInfo, SearchInfo, SearchResult, RenderingExtension } from './Models';
import { AiInfo } from './Types/AiInfoType';
import { ConfigurationInfo } from './Types/ConfigurationInfoType';
export interface IAuthStrategy {
    authenticatePromise(isRefresh?: boolean, refreshToken?: string): Promise<string>;
}
export declare class NoAuth implements IAuthStrategy {
    authenticatePromise(): Promise<string>;
}
export declare class BasicAuth implements IAuthStrategy {
    private connectionConfig;
    constructor(connectionConfig: any);
    authenticatePromise(): Promise<string>;
}
export declare class PersonalTokenAuth implements IAuthStrategy {
    private connectionConfig;
    constructor(connectionConfig: any);
    authenticatePromise(isRefresh: boolean, refreshToken: string): Promise<string>;
}
export declare enum AuthType {
    None = 0,
    Basic = 1,
    PersonalToken = 2
}
export declare class ConnectionConfig {
    authType: AuthType;
    baseUrl: string;
    serviceUrl: string;
    constructor(baseUrl: string);
}
export declare class ConnectionConfigNoAuth extends ConnectionConfig {
    constructor(baseUrl: string);
}
export declare class ConnectionConfigServerNoAuth extends ConnectionConfig {
    constructor(baseUrl: string);
}
export declare class ConnectionConfigServerCredentials extends ConnectionConfigServerNoAuth {
    username: string;
    password: string;
    tokenUrl: string;
    constructor(baseUrl: string, username: string, password: string);
}
export declare class ConnectionConfigServerToken extends ConnectionConfigServerNoAuth {
    getPersonalAccessToken: Function;
    personalTokenUrl: string;
    refreshTokenUrl: string;
    constructor(baseUrl: string, getPersonalAccessToken: Function);
}
export declare class ServiceClient implements IServiceClient {
    private loginPromise?;
    private connectionConfig;
    private authStrategy;
    constructor(options: any);
    private getConnectionConfig;
    private getAuthStrategy;
    private validateClientID;
    private authenticatedGet;
    private authenticatedPost;
    private authenticatedDelete;
    login(): Promise<string>;
    get(url: string): Promise<any>;
    setAccessToken(accessToken: string): void;
    registerClient(): Promise<string>;
    unregisterClient(clientId: string): Promise<any>;
    getParameters(clientId: string, report: string, parameterValues?: any): Promise<ParameterInfo[]>;
    createReportInstance(clientId: string, report: string, parameterValues?: any): Promise<string>;
    deleteReportInstance(clientId: string, instanceId: string): Promise<any>;
    createReportDocument(clientId: string, instanceId: string, format: string, deviceInfo: DeviceInfo, useCache: boolean, baseDocumentID: string, actionID: string): Promise<string>;
    sendDocument(clientId: string, instanceId: string, documentId: string, mailArgs: EmailInfo): Promise<any>;
    deleteReportDocument(clientId: string, instanceId: string, documentId: string): Promise<any>;
    getDocumentUrl(clientId: string, instanceId: string, documentId: string): string;
    getDocumentInfo(clientId: string, instanceId: string, documentId: string): Promise<DocumentInfo>;
    getPage(clientId: string, instanceId: string, documentId: string, pageNumber: number): Promise<PageInfo>;
    getDocumentFormats(): Promise<RenderingExtension[]>;
    getServiceVersion(): Promise<string>;
    getServiceConfiguration(): Promise<ConfigurationInfo>;
    getResource(clientId: string, instanceId: string, documentId: string, resourceId: string): Promise<any>;
    getSearchResults(clientId: string, instanceId: string, documentId: string, searchInfo: SearchInfo): Promise<SearchResult[]>;
    createAIThread(clientId: string, instanceId: string, report: string, parameterValues?: any): Promise<AiInfo>;
    getAIResponse(clientId: string, instanceId: string, documentId: string, threadId: string, query: string): Promise<string>;
    getServiceUrl(): string;
    keepClientAlive(clientId: string): Promise<any>;
    getClientsSessionTimeoutSeconds(): Promise<number>;
}
