import { type DocumentReference, type DocumentSnapshot, type Transaction as FirebaseFirestoreTransaction, type UpdateData, type WithFieldValue } from 'firebase/firestore'; import { type Observable } from 'rxjs'; import { type FirestoreDocumentDataAccessor, type FirestoreDocumentDataAccessorFactory, type FirestoreDocumentContext, FirestoreDocumentContextType, type SetOptions, type DocumentData, type FirestoreDataConverter, type WriteResult, type FirestoreAccessorIncrementUpdate, type FirestoreAccessorArrayUpdate } from '../../common/firestore'; /** * Client-side {@link FirestoreDocumentDataAccessor} that executes all operations within a Firestore `Transaction`. * * Unlike the default accessor, reads and writes are all routed through the transaction object, * providing atomic read-then-write semantics. The `stream()` method emits a single snapshot * from the transactional read rather than a live stream. */ export declare class TransactionFirestoreDocumentDataAccessor implements FirestoreDocumentDataAccessor { private readonly _transaction; private readonly _documentRef; constructor(transaction: FirebaseFirestoreTransaction, documentRef: DocumentReference); get transaction(): FirebaseFirestoreTransaction; get documentRef(): DocumentReference; stream(): Observable>; create(data: WithFieldValue): Promise; exists(): Promise; get(): Promise>; getWithConverter(converter: null | FirestoreDataConverter): Promise>; delete(): Promise; set(data: WithFieldValue, options?: SetOptions): Promise; increment(data: FirestoreAccessorIncrementUpdate): Promise; arrayUpdate(data: FirestoreAccessorArrayUpdate): Promise; update(data: UpdateData): Promise; } /** * Creates a {@link FirestoreDocumentDataAccessorFactory} that produces {@link TransactionFirestoreDocumentDataAccessor} * instances bound to the given transaction. All operations from these accessors participate in the same transaction. * * @param transaction - the Firestore `Transaction` to bind operations to * @returns a factory that creates transaction-backed document data accessors for any document reference * * @example * ```ts * await runTransaction(firestore, async (transaction) => { * const factory = transactionAccessorFactory(transaction); * const accessor = factory.accessorFor(docRef); * const snapshot = await accessor.get(); * // ... modify and set * }); * ``` */ export declare function transactionAccessorFactory(transaction: FirebaseFirestoreTransaction): FirestoreDocumentDataAccessorFactory; /** * Client-side {@link FirestoreDocumentContext} that executes all document operations within a Firestore `Transaction`. * * Provides accessors with {@link FirestoreDocumentContextType.TRANSACTION} semantics — all reads are * consistent and all writes are applied atomically when the transaction completes. */ export declare class TransactionFirestoreDocumentContext implements FirestoreDocumentContext { private readonly _transaction; readonly contextType = FirestoreDocumentContextType.TRANSACTION; readonly accessorFactory: FirestoreDocumentDataAccessorFactory; constructor(transaction: FirebaseFirestoreTransaction); get transaction(): FirebaseFirestoreTransaction; } /** * Factory function that creates a {@link TransactionFirestoreDocumentContext} for the given transaction. * * @param transaction - the Firestore `Transaction` to use for all document operations * @returns a new {@link TransactionFirestoreDocumentContext} bound to the given transaction * * @example * ```ts * const context = transactionDocumentContext(transaction); * const accessor = context.accessorFactory.accessorFor(docRef); * ``` */ export declare function transactionDocumentContext(transaction: FirebaseFirestoreTransaction): TransactionFirestoreDocumentContext;