import { Observable } from 'rxjs'; import { DataSource } from 'typeorm'; import { RequestContext } from '../api/common/request-context'; import { TransactionIsolationLevel, TransactionMode } from '../api/decorators/transaction.decorator'; /** * @description * This helper class is used to wrap operations in a TypeORM transaction in order to ensure * atomic operations on the database. */ export declare class TransactionWrapper { /** * @description * Executes the `work` function within the context of a transaction. If the `work` function * resolves / completes, then all the DB operations it contains will be committed. If it * throws an error or rejects, then all DB operations will be rolled back. * * @note * This function does not mutate your context. Instead, this function makes a copy and passes * context to work function. */ executeInTransaction(originalCtx: RequestContext, work: (ctx: RequestContext) => Observable | Promise, mode: TransactionMode, isolationLevel: TransactionIsolationLevel | undefined, connection: DataSource): Promise; /** * Attempts to start a DB transaction, with retry logic in the case that a transaction * is already started for the connection (which is mainly a problem with SQLite/Sql.js) */ private startTransaction; /** * If the resolver function throws an error, there are certain cases in which * we want to retry the whole thing again - notably in the case of a deadlock * situation, which can usually be retried with success. */ private isRetriableError; }