Skip to main content

Middleware Overview

Add cross-cutting concerns to your sagas.

Middleware Pipeline​

Available Middleware​

PackagePurpose
LoggingStructured logging
TracingOpenTelemetry spans
MetricsPrometheus metrics
ValidationSchema validation
IdempotencyDeduplication
TenantMulti-tenancy

Using Middleware​

import { createBus } from '@saga-bus/core';
import { createLoggingMiddleware } from '@saga-bus/middleware-logging';
import { createTracingMiddleware } from '@saga-bus/middleware-tracing';
import { createMetricsMiddleware } from '@saga-bus/middleware-metrics';

const bus = createBus({
transport,
store,
sagas: [{ definition: orderSaga }],
middleware: [
createLoggingMiddleware({ level: 'info' }),
createTracingMiddleware({ serviceName: 'order-worker' }),
createMetricsMiddleware({ prefix: 'saga_bus' }),
],
});

Middleware Order​

Order matters! Recommended order:

  1. Logging (first - logs everything)
  2. Tracing (creates spans for downstream)
  3. Metrics (records timing)
  4. Validation (reject invalid early)
  5. Idempotency (check duplicates)
  6. Tenant (extract context)

Creating Custom Middleware​

See Custom Middleware.