Transaction options
The tx options are Prisma's native interactive-$transaction options —
timeout, maxWait, and isolationLevel. Set them per call, or as
defaultTxOptions for every transaction:
@Transactional({ propagation: Propagation.REQUIRES_NEW, timeout: 30_000, maxWait: 5_000 })
async audit(entry: AuditEntry) {
/* ... */
}
Use the IsolationLevel enum for autocomplete and typo-free values (its members
map to Prisma's isolation-level literals, so a raw string still works too):
import { IsolationLevel, Transactional, TransactionalModule } from '@nestjs-transactions/prisma';
TransactionalModule.forRoot({
prismaToken: PrismaService,
imports: [PrismaModule],
defaultTxOptions: { isolationLevel: IsolationLevel.REPEATABLE_READ, timeout: 10_000 },
});
// per call — overrides the defaults:
@Transactional({ isolationLevel: IsolationLevel.SERIALIZABLE })
Resolve the defaults asynchronously (e.g. from ConfigService) with
forRootAsync. Only defaultTxOptions is resolved at DI time; prismaToken,
sqlFlavor, and connectionName stay static:
TransactionalModule.forRootAsync({
prismaToken: PrismaService,
imports: [PrismaModule],
inject: [ConfigService],
useFactory: (config: ConfigService) => ({
defaultTxOptions: { timeout: config.get('DB_TX_TIMEOUT') },
}),
});
Default timeout is 5s
Prisma's interactive transactions default to a 5s timeout (error P2028).
Raise it via defaultTxOptions: { timeout } in forRoot or per call.