UNPKG

@tanstack/offline-transactions

Version:

Offline-first transaction capabilities for TanStack DB

56 lines (55 loc) 2.41 kB
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;