import { CacheOptions } from '@vyer-technologies/cache-persist';
export type Request<T> = {
    payload: T;
    backup?: any;
    sink?: any;
};
export type OfflineRecordCache<T> = {
    id: string;
    request: Request<T>;
    fetchTime: number;
    retry?: number;
    error?: any;
    serial?: boolean;
};
export type OfflineFirstOptions<T> = {
    manualExecution?: boolean;
    execute: (offlineRecord: OfflineRecordCache<T>) => Promise<any>;
    start?: (mutations: Array<OfflineRecordCache<T>>) => Promise<Array<OfflineRecordCache<T>>>;
    onExecute?: (mutation: OfflineRecordCache<T>) => Promise<OfflineRecordCache<T>>;
    finish?: (mutations: ReadonlyArray<OfflineRecordCache<T>>, error?: Error) => Promise<void>;
    onComplete?: (options: {
        offlineRecord: OfflineRecordCache<T>;
        response: any;
    }) => Promise<boolean>;
    onDiscard?: (options: {
        offlineRecord: OfflineRecordCache<T>;
        error: any;
    }) => Promise<boolean>;
    onPublish?: (offlineRecord: OfflineRecordCache<T>) => Promise<OfflineRecordCache<T>>;
    compare?: (v1: OfflineRecordCache<T>, v2: OfflineRecordCache<T>) => number;
};
export declare class OfflineFirst<T> {
    private offlineStore;
    private busy;
    private offlineOptions;
    private online;
    private rehydrated;
    private promisesRestore;
    private disposeListener;
    constructor(persistOptions?: CacheOptions);
    setOfflineOptions(offlineOptions?: OfflineFirstOptions<T>): void;
    purge(): Promise<boolean>;
    isManualExecution(): boolean;
    dispose(): void;
    hydrate(): Promise<boolean>;
    isOnline(): boolean;
    subscribe(callback: (state: any, action: any) => void): () => void;
    notify(): void;
    getState(): {
        [key: string]: any;
    };
    remove(id: string): Promise<void>;
    set(id: string, value: OfflineRecordCache<T>): Promise<void>;
    getListMutation(): Array<OfflineRecordCache<T>>;
    process(): Promise<void>;
    executeMutation(offlineRecord: OfflineRecordCache<T>): Promise<void>;
    publish(options: {
        id?: string;
        request: Request<T>;
        serial?: boolean;
    }): Promise<OfflineRecordCache<T>>;
}
//# sourceMappingURL=index.d.ts.map