@multisystemsuite/transaction-manager
v2.1.0
Published
Transaction management with retry, saga, and framework integrations
Readme
@multisystemsuite/transaction-manager
Transaction orchestration with commit/rollback, automatic retry on deadlocks, saga compensation, and Express/NestJS integration helpers.
Version: 1.0.1 · License: MIT
npm readme: @multisystemsuite/transaction-manager on npm
Installation
pnpm add @multisystemsuite/transaction-managerQuick start
import { TransactionManager } from '@multisystemsuite/transaction-manager';
const transaction = new TransactionManager({
maxRetries: 3,
retryDelayMs: 100,
});
await transaction.run(async (trx) => {
await userRepo.save(trx);
await orderRepo.save(trx);
});Configuration
| Option | Default | Description |
|--------|---------|-------------|
| maxRetries | 3 | Retries on deadlock / serialization errors |
| retryDelayMs | 100 | Base delay (multiplied by attempt) |
| isolationLevel | — | Optional isolation hint |
| timeout | — | Optional timeout (ms) |
Retryable errors: messages containing deadlock, serialization, or timeout.
API reference
run<T>(handler, adapter?): Promise<T>
Runs handler inside a logical transaction.
await transaction.run(async (trx) => {
console.log(trx.id, trx.startedAt);
return { ok: true };
}, {
begin: () => db.begin(),
commit: () => db.commit(),
rollback: () => db.rollback(),
});TransactionContext: id, startedAt, committed, rolledBack
saga(steps: SagaStep[])
Compensating transaction pattern:
await transaction.saga([
{
name: 'reserve-inventory',
execute: async () => inventory.reserve(orderId),
compensate: async (res) => inventory.release(res),
},
{
name: 'charge-payment',
execute: async () => payments.charge(orderId),
compensate: async (id) => payments.refund(id),
},
]);On failure, completed steps run compensate in reverse order.
Framework integration
Express
import { TransactionManager, createExpressMiddleware } from '@multisystemsuite/transaction-manager';
const manager = new TransactionManager();
app.use(createExpressMiddleware(manager));NestJS
import { createNestInterceptor } from '@multisystemsuite/transaction-manager';
@UseInterceptors(createNestInterceptor(manager))
@Controller('orders')
export class OrdersController {}Related packages
See the @multisystemsuite org on npm.
npm
- Package: @multisystemsuite/transaction-manager
- Install:
npm install @multisystemsuite/transaction-manager
