Skip to content

Middleware Packages

Strata publishes first-party middleware as separate npm packages under the @strata-js scope. Each package provides a middleware class that you instantiate with options and register on your service, context, or operation.

For how to register and order middleware, see the Using Middleware guide. For building your own, see Writing Middleware.

Available Packages

PackageDescriptionnpm
CacheCaches operation responses using memory, Redis, or a custom store.@strata-js/middleware-cache
Message LoggingLogs request/response envelopes to a queue for monitoring.@strata-js/middleware-message-logging
Payload ValidationValidates request payloads using JSON Schema (AJV) or Zod.@strata-js/middleware-payload-validation

Quick Example

typescript
import { StrataService, StrataContext } from '@strata-js/strata';
import { CacheMiddleware } from '@strata-js/middleware-cache';
import { MessageLoggingMiddleware } from '@strata-js/middleware-message-logging';
import { AjvPayloadValidationMiddleware } from '@strata-js/middleware-payload-validation/ajv';

const service = new StrataService(config);
const users = new StrataContext('users');

// Global -- logs every request/response
service.useMiddleware(new MessageLoggingMiddleware(client, {
    serviceGroup: { toMonitor: 'UserService', toLogTo: 'MonitorService' },
}));

// Context -- validates every operation in 'users'
users.useMiddleware(new AjvPayloadValidationMiddleware(userSchemas));

// Operation -- caches get responses
users.registerOperation('get', async (request) =>
{
    return { user: await db.findUser(request.payload.userId) };
}, [], [ new CacheMiddleware({ kind: 'memory', key: 'users' }) ]);

service.registerContext(users);
await service.start();

Writing Custom Middleware

Need something these packages don't cover? Strata's middleware interface is simple to implement. See the Writing Middleware guide for a complete walkthrough.