import { AuthManager } from "../authManager";
export declare type ContextType = "text" | "gmail";
/**
 * Snippet metadata
 */
export interface Snippet {
    'id_': string;
    'name': string;
    'content': string;
    'labels': string[];
}
/**
 * Reply metadata
 */
export interface ReplyMeta {
    prompt: string;
    suggestions: Reply[];
    type: string;
}
interface Reply {
    text: string;
    confidence: number;
}
export interface AutocompleteResponse {
    snippets: Snippet[];
    seedText: string;
    responseId: string;
}
export interface ReplyResponse {
    replies: ReplyMeta[];
    responseId: string;
}
export interface SessionError {
    status: "failure";
    reason: "exceeded_daily_usage_limit" | "expired_membership";
}
export interface AutocompleteSession {
    reconnect: () => Promise<void>;
    disconnect: () => void;
    setOnErrorHandler: (callback: (error: SessionError) => void) => void;
    queryByContent: (seedText: string, currentContext?: string) => Promise<AutocompleteResponse | null>;
    queryByName: (query: string) => Promise<AutocompleteResponse | null>;
    feedback: (responseId: string, snippet: Snippet, origin: string) => Promise<void>;
}
/**
 * Point Websockets Api Instance
 */
export default class AutocompleteSessionImpl implements AutocompleteSession {
    /** Email address of Point user */
    private readonly emailAddress;
    /** AuthManager manages credentials & JWT */
    private authManager;
    /** Search type */
    private searchType;
    /** API URL */
    private readonly ApiUrl;
    /** @private SocketIO instance used to interact with Point API */
    private socket;
    /** @private Reconnect counter  */
    private reconnectCount;
    /** @private Max reconnect attempts  */
    private readonly maxReconnects;
    /** Error handler */
    private onErrorHandler;
    /**
     * @param  emailAddress Email address of Point user
     * @param  authCode Auth code (JWT) provider
     */
    constructor(emailAddress: string, authManager: AuthManager, searchType?: string, apiUrl?: string);
    /**
     * Reconnects to the Point API socket.io
     */
    reconnect(): Promise<void>;
    /**
     * Disconnects from the Point API manually
     */
    disconnect(): void;
    /**
     * Registers error handler callback that will be invoked
     * on any socket.io session errors sent from the server.
     *
     * @param callback Error callback method
     */
    setOnErrorHandler: (callback: (error: SessionError) => void) => void;
    /**
     *  Query PointApi with seed text to get predicted suggestions
     * @param seedText The text to base suggestion predictions off of
     * @returns A list of the predicted suggestion objects
     */
    queryByContent(seedText: string, currentContext?: string): Promise<AutocompleteResponse | null>;
    /**
     *  Query PointApi with a hotkey trigger to get a full hotkey suggestion
     * @param trigger String that is a shortcut for the full hotkey text
     * @returns A list of the predicted suggestion objects
     */
    queryByName(query: string): Promise<AutocompleteResponse | null>;
    /**
     * Give feedback on Point Api's suggestions.
     * This is like chosenSuggestion/Hotkey interaction.
     */
    feedback(responseId: string, snippet: Snippet, origin: string): Promise<void>;
    /**
     *  Get reply suggestions given some recieved text
     */
    reply(previousMessage: string, contextType?: ContextType): Promise<ReplyResponse | null>;
    /**
     * Callback function that handles JWT changed events.
     */
    private onJwtChange;
}
export {};
