export interface HeimdallConstructor {
    vendorId: string;
    homeOrkOrigin: string;
    voucherURL: string;
    signed_client_origin: string;
    isRunningLocal?: boolean;
}
export declare abstract class Heimdall<T> implements EnclaveFlow<T> {
    name: string;
    _windowType: windowType;
    enclaveOrigin: string;
    voucherURL: string;
    signed_client_origin: string;
    vendorId: string;
    isRunningLocal: boolean;
    private enclaveWindow;
    constructor(init: HeimdallConstructor);
    enclaveClosed(): boolean;
    getOrkUrl(): URL;
    open(): Promise<boolean>;
    send(data: any): void;
    recieve(type: string, silent?: boolean): Promise<any>;
    close(): void;
    onerror(data: any): void;
    private openPopUp;
    private closeHiddenIframe;
    private openHiddenIframe;
    private closePopupEnclave;
    private waitForWindowPostMessage;
    private sendPostWindowMessage;
    private processEvent;
}
export declare enum windowType {
    Popup = 0,
    Redirect = 1,
    Hidden = 2
}
export interface HiddenInit {
    backgroundUrl: string;
    logoUrl: string;
    doken: string;
    /**
     * @returns A refresh doken for Heimdall
     */
    dokenRefreshCallback: () => Promise<string> | undefined;
    /**
     * @returns A function that re authenticates the current user from the client. (Used to update their session key on Identity System). Returns a new doken too.
     */
    requireReloginCallback: () => Promise<string>;
}
interface EnclaveFlow<T> {
    name: string;
    _windowType: windowType;
    open(): Promise<boolean>;
    send(data: any): void;
    recieve(type: string): Promise<any>;
    close(): void;
    onerror(data: any): void;
    getOrkUrl(): URL;
}
export {};
