/** @packageDocumentation
 * @module NativeApp
 */
import { AsyncMethodsOf, BeEvent, GuidString, PromiseReturnType } from "@itwin/core-bentley";
import { BriefcaseDownloader, BriefcaseProps, IModelVersion, InternetConnectivityStatus, IpcSocketFrontend, LocalBriefcaseProps, NativeAppFunctions, StorageValue, SyncMode } from "@itwin/core-common";
import { ProgressCallback } from "./request/Request";
import { IpcAppOptions } from "./IpcApp";
import { OnDownloadProgress } from "./BriefcaseConnection";
/** Properties for specifying the BriefcaseId for downloading. May either specify a BriefcaseId directly (preferable) or, for
 * backwards compatibility, a [SyncMode]($common). If [SyncMode.PullAndPush]($common) is supplied, a new briefcaseId will be acquired.
 * @public
 */
export type DownloadBriefcaseId = {
    syncMode?: SyncMode;
    briefcaseId?: never;
} | {
    briefcaseId: number;
    syncMode?: never;
};
/**
* Options to download a briefcase
* @public
*/
export type DownloadBriefcaseOptions = DownloadBriefcaseId & {
    /** the full path for the briefcase file */
    fileName?: string;
    /** Function called regularly to report progress of download. */
    progressCallback?: OnDownloadProgress;
    /** interval for calling progress function, in milliseconds */
    progressInterval?: number;
};
/**
 * Options for [[NativeApp.startup]]
 * @public
 */
export interface NativeAppOpts extends IpcAppOptions {
    nativeApp?: object;
}
/**
 * The frontend of a native application
 * @see [Native Applications]($docs/learning/NativeApps.md)
 * @public
 */
export declare class NativeApp {
    private static _removeAppNotify?;
    /** @deprecated in 3.x. use nativeAppIpc */
    static callNativeHost<T extends AsyncMethodsOf<NativeAppFunctions>>(methodName: T, ...args: Parameters<NativeAppFunctions[T]>): Promise<PromiseReturnType<NativeAppFunctions[T]>>;
    /** A Proxy to call one of the [NativeAppFunctions]($common) functions via IPC. */
    static nativeAppIpc: import("@itwin/core-bentley").PickAsyncMethods<NativeAppFunctions>;
    private static _storages;
    private static _onOnline;
    private static _onOffline;
    private static setConnectivity;
    private static hookBrowserConnectivityEvents;
    private static unhookBrowserConnectivityEvents;
    /** event called when internet connectivity changes, if known */
    static onInternetConnectivityChanged: BeEvent<(status: InternetConnectivityStatus) => void>;
    /** determine whether the app currently has internet connectivity, if known */
    static checkInternetConnectivity(): Promise<InternetConnectivityStatus>;
    /** @internal */
    static overrideInternetConnectivity(status: InternetConnectivityStatus): Promise<void>;
    private static _isValid;
    static get isValid(): boolean;
    /**
     * This is called by either ElectronApp.startup or MobileApp.startup - it should not be called directly
     * @internal
     */
    static startup(ipc: IpcSocketFrontend, opts?: NativeAppOpts): Promise<void>;
    /** @internal */
    static shutdown(): Promise<void>;
    static requestDownloadBriefcase(iTwinId: string, iModelId: string, downloadOptions: DownloadBriefcaseOptions, asOf?: IModelVersion): Promise<BriefcaseDownloader>;
    /**
     * @deprecated in 3.6. `progress` argument is now deprecated, use [[DownloadBriefcaseOptions.progressCallback]] instead.
     */
    static requestDownloadBriefcase(iTwinId: string, iModelId: string, downloadOptions: DownloadBriefcaseOptions, asOf?: IModelVersion, progress?: ProgressCallback): Promise<BriefcaseDownloader>;
    /** Get the full path filename for a briefcase within the briefcase cache */
    static getBriefcaseFileName(props: BriefcaseProps): Promise<string>;
    /** Delete an existing briefcase
     * @param fileName the briefcase fileName
     */
    static deleteBriefcase(fileName: string): Promise<void>;
    /** Get a list of all briefcase files held in the local briefcase cache directory */
    static getCachedBriefcases(iModelId?: GuidString): Promise<LocalBriefcaseProps[]>;
    /**
     * Open a [[Storage]]. Creates a new Storage with that name if it does not already exist.
     * @param name Should be a local filename without an extension.
     * @returns a Promise for the [[Storage]].
     */
    static openStorage(name: string): Promise<Storage>;
    /**
     * Close a Storage and optionally delete it.
     * @param storage normally not call directly instead use Storage.close()
     * @param deleteStorage if true, delete the storage from disk after closing it.
     */
    static closeStorage(storage: Storage, deleteStorage?: boolean): Promise<void>;
    /** Get the list of existing Storages on the local disk. */
    static getStorageNames(): Promise<string[]>;
}
/**
 *  A local disk-based cache for key value pairs for NativeApps.
 * @note This should be used only for local caching, since its not guaranteed to exist permanently.
 * @public
 */
export declare class Storage {
    readonly id: string;
    constructor(id: string);
    /** get the type of a value for a key, or undefined if not present. */
    getValueType(key: string): Promise<"number" | "string" | "boolean" | "Uint8Array" | "null" | undefined>;
    /** Get the value for a key */
    getData(key: string): Promise<StorageValue>;
    /** Set value for a key */
    setData(key: string, value: StorageValue): Promise<void>;
    /**
     * Return an array of all keys in this Storage.
     * @note This can be expensive, depending on the number of keys present.
     */
    getKeys(): Promise<string[]>;
    /** Remove a key and its data. */
    removeData(key: string): Promise<void>;
    /** Remove all keys and their data. */
    removeAll(): Promise<void>;
}
//# sourceMappingURL=NativeApp.d.ts.map