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
| Package | Description | npm |
|---|---|---|
| Cache | Caches operation responses using memory, Redis, or a custom store. | @strata-js/middleware-cache |
| Message Logging | Logs request/response envelopes to a queue for monitoring. | @strata-js/middleware-message-logging |
| Payload Validation | Validates 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.