@inngest/middleware-validation
v0.0.1
Published
Schema validation middleware for Inngest.
Downloads
521
Readme
@inngest/middleware-validation
This package provides a validation middleware for Inngest, enabling parsing of
incoming and outgoing events using Zod schemas provided using new
EventSchemas().fromZod()
.
Features
- Validates incoming event payloads when a function is run
- Validates outgoing event payloads using
inngest.send()
orstep.sendEvent()
- Optionally disallow events without specified schemas
Installation
npm install @inngest/middleware-validation
[!NOTE] Requires TypeScript SDK >= 3.23.1
Usage
To use the validation middleware, import and initialize it.
import { Inngest, EventSchemas } from "inngest";
import { validationMiddleware } from "@inngest/middleware-validation";
import { z } from "zod";
const inngest = new Inngest({
id: "my-app",
middleware: [validationMiddleware()], // just add this
schemas: new EventSchemas().fromZod({
"example/event": {
data: z.object({
message: z.string(),
}),
},
}),
});
By default, simply adding validationMiddleware()
to an existing client that uses Zod schemas will validate all incoming and outgoing events.
You can provide some extra options to customize the behaviour:
validationMiddleware({ ... });
{
/**
* Disallow events that don't have a schema defined.
*
* For this to happen, it probably means that the event is typed using
* `.fromRecord()` or some other type-only method, and we have no way of
* validating the payload at runtime.
*
* @default false
*/
disallowSchemalessEvents?: boolean;
/**
* Disallow events that have a schema defined, but the schema is unknown and
* not handled in this code.
*
* This is most likely to happen if schemas can be defined using a library not yet
* supported by this middleware.
*
* @default false
*/
disallowUnknownSchemas?: boolean;
/**
* Disable validation of incoming events.
*
* @default false
*/
disableIncomingValidation?: boolean;
/**
* Disable validation of outgoing events using `inngest.send()` or
* `step.sendEvent()`.
*
* @default false
*/
disableOutgoingValidation?: boolean;
}
[!NOTE] Due to current typing restrictions within middleware, transforming types is currently unsupported, for example using
z.transform()
. This can be introduced in a later update once more mature middleware typing is available, likely ininngest@^4.0.0
.