import { OfflineTransaction as OfflineTransactionAPI } from './api/OfflineTransaction.cjs';
import { CreateOfflineActionOptions, CreateOfflineTransactionOptions, OfflineConfig, OfflineMode, OfflineTransaction, OnlineDetector, StorageDiagnostic } from './types.cjs';
import { Transaction } from '@tanstack/db';
export declare class OfflineExecutor {
    private config;
    private storage;
    private outbox;
    private scheduler;
    private executor;
    private leaderElection;
    private onlineDetector;
    private isLeaderState;
    private unsubscribeOnline;
    private unsubscribeLeadership;
    readonly mode: OfflineMode;
    readonly storageDiagnostic: StorageDiagnostic;
    private initPromise;
    private initResolve;
    private initReject;
    private pendingTransactionPromises;
    private restorationTransactions;
    constructor(config: OfflineConfig);
    /**
     * Probe storage availability and create appropriate adapter.
     * Returns null if no storage is available (online-only mode).
     */
    private createStorage;
    private createLeaderElection;
    private setupEventListeners;
    private initialize;
    private loadAndReplayTransactions;
    get isOfflineEnabled(): boolean;
    /**
     * Wait for the executor to fully initialize.
     * This ensures that pending transactions are loaded and optimistic state is restored.
     */
    waitForInit(): Promise<void>;
    createOfflineTransaction(options: CreateOfflineTransactionOptions): Transaction | OfflineTransactionAPI;
    createOfflineAction<T>(options: CreateOfflineActionOptions<T>): (variables: T) => Transaction<Record<string, unknown>>;
    private persistTransaction;
    waitForTransactionCompletion(transactionId: string): Promise<any>;
    resolveTransaction(transactionId: string, result: any): void;
    rejectTransaction(transactionId: string, error: Error): void;
    registerRestorationTransaction(offlineTransactionId: string, restorationTransaction: Transaction): void;
    private cleanupRestorationTransaction;
    removeFromOutbox(id: string): Promise<void>;
    peekOutbox(): Promise<Array<OfflineTransaction>>;
    clearOutbox(): Promise<void>;
    getPendingCount(): number;
    getRunningCount(): number;
    getOnlineDetector(): OnlineDetector;
    isOnline(): boolean;
    dispose(): void;
}
export declare function startOfflineExecutor(config: OfflineConfig): OfflineExecutor;
