/// <reference types="node" />
import { Realm } from "./shared/realmUtil";
import { Agent } from "https";
import { Discovery } from "./discovery";
import { Logger } from "./shared/Logger";
import { RealmDirectoryClient } from "./service-clients/RealmDirectoryClient";
export interface RealmDefinition {
    remotePath: string;
    localPath?: string;
    syncLabel?: string;
    schema: any[];
    user?: Realm.Sync.User;
    forceCloseHandler?: {
        id: string;
        handler: ForceCloseHandler;
    };
}
export declare type ForceCloseHandler = (deleteAfterClose: boolean) => void;
export declare function createRealmSchema(klass: any): any;
declare class RealmPromise extends Promise<Realm> {
    openCount: number;
    forceClose: (message: string, isToBeDeleted?: boolean) => void;
    config: Realm.Configuration;
    remotePath: string;
    isResolved: boolean;
    error: Error;
    forceCloseHandlers: {
        [id: string]: ForceCloseHandler;
    };
    constructor(executor: (resolve: (value?: Realm | PromiseLike<Realm>) => void, reject: (reason?: any) => void) => void);
}
export interface RealmFactoryParams {
    discovery: Discovery;
    dataPath: string;
    adminToken: string;
    logger: Logger;
    realmDirectoryClient: RealmDirectoryClient;
    ssl?: {
        agent: Agent;
        httpsCertificatePath: string;
    };
    realmsEncryptionKey?: ArrayBuffer | ArrayBufferView;
}
export declare class RealmFactory {
    private syncedRealmPromises;
    private readonly discovery;
    private readonly adminToken;
    private readonly dataPath;
    private readonly logger;
    private readonly realmDirectoryClient;
    private readonly ssl?;
    private readonly realmsEncryptionKey?;
    private static sessionStopPolicy;
    constructor(params: RealmFactoryParams);
    open(definition: RealmDefinition): Promise<Realm>;
    close(): Promise<void>;
    forceCloseRealm(pathOrPromise: string | RealmPromise, message: string, deleteAfterClose?: boolean): Promise<void>;
    private findSyncLabel;
}
export {};
