@tanstack/offline-transactions
Version:
Offline-first transaction capabilities for TanStack DB
56 lines (55 loc) • 2.41 kB
text/typescript
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;