High-performance adapters for AWS Lambda. This package provides specialized wrappers for API Gateway and SQS, integrating seamlessly with the @kleanjs/core middleware engine.
- Service-Specific Wrappers: Specialized middlewares for API Gateway (REST/HTTP) and SQS (Parallel or Serial).
- Automatic Response Formatting: Built-in handlers to transform business objects into AWS-compliant responses.
- Partial Batch Support: Native handling of SQS
batchItemFailuresto optimize queue processing and costs. - Type Injection: Pre-configured infrastructure types (Events, Context, Results) for a zero-boilerplate experience.
npm install @kleanjs/aws-lambda @kleanjs/core ajv ajv-formatsThe apiGatewayMiddleware is pre-configured to handle HTTP requests. It automatically injects APIGatewayProxyEvent and APIGatewayProxyResult types.
While it inherits from HandlerConfig, it provides sensible defaults:
- Default Result:
APIGatewayProxyResult. - Default Response:
responseJSON()(Content-Type: application/json). - Default Error Handler: Automatically maps
EventErrorproperties to the response body and status code.
import { apiGatewayMiddleware, responseJSON, Use } from "@kleanjs/aws-lambda";
export const handler = apiGatewayMiddleware(
async (event) => {
return { id: event.body.id, status: "active" };
},
{
validators: {
body: Use<{ id: string }>()
},
customResponse: responseJSON({ statusCode: 201 })
}
);SQS processing is divided into two execution modes. Both modes isolate the logic to a single SQSRecord, abstracting the Records array iteration.
Processes all records in the batch simultaneously using Promise.allSettled. This is ideal for high-throughput tasks.
Processes records one by one. Use this when the processing order is critical or to prevent race conditions.
If a record throws an EventError or fails validation, the middleware catches it and adds its messageId to the batchItemFailures array. AWS will then retry only the failed messages.
import { sqsMiddlewareParallel, Use } from "@kleanjs/aws-lambda";
export const handler = sqsMiddlewareParallel(
async (record) => {
// 'record' is a single SQSRecord with typed body
await processOrder(record.body.orderId);
},
{
validators: {
body: Use<{ orderId: string }>()
}
}
);export type SQSOptions<TValidators extends TSchemaMap, TContext = Context> =
Omit<HandlerConfig<any, any, TContext, TValidators>, "customResponse" | "event" | "result" | "context">;The adapters catch any EventError (including AJVSimpleError or AJVFullError) and transform them as follows:
- Status Code: Taken from
error.statusCode. - Body: Standardized JSON with
type,message, anddetails.
Any error thrown within the record handler marks that specific message as failed. The adapter returns the batchItemFailures object required by AWS.
GPLv3