npm package: @summit-credit-union/validation-middleware
Description: A reusable middleware for validating incoming requests against an OpenAPI specification using AJV.
Author: Summit
Latest version: 1.0.5

# Validation Middleware Package

A reusable middleware for validating incoming requests against an OpenAPI specification using AJV (Another JSON Schema Validator). This package can be easily integrated into any Express application to ensure that requests conform to the defined API schema.

## Features

- Validates request bodies, query parameters, path parameters, headers, and cookies.
- Supports custom formats and schemas.
- Provides detailed error messages for invalid requests.
- Easy to integrate with existing Express applications.

## Installation

To install the package, run:

```bash
npm i @summit-credit-union/validation-middleware
```

## Usage

1. Import the `ValidationMiddleware` class in your Express application:

```typescript
import express from 'express';
import { ValidationMiddleware } from '@summit-credit-union/validation-middleware';

const app = express();
const validationMiddleware = new ValidationMiddleware(apiSpec);
```

2. Use the middleware in your routes:

```typescript
app.use(validationMiddleware.validate.bind(validationMiddleware));
```

3. Define your OpenAPI specification and ensure it is accessible to the middleware.

## Example

Here is a simple example of how to set up the middleware:

```typescript
import express from 'express';
import { ValidationMiddleware } from '@summit-credit-union/validation-middleware';
import openapiSpecification from './path/to/openapi/specification';

const app = express();
const validationMiddleware = new ValidationMiddleware(openapiSpecification, process.env.NODE_ENV === 'development');

app.use(express.json());
app.use(validationMiddleware.validate.bind(validationMiddleware));

app.get('/api/example', (req, res) => {
  res.send('This is a valid response!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
```

## Usage in server.ts

Here is an example of how to use the middleware in `server.ts`:

```typescript
import express from 'express';
import { ValidationMiddleware } from '@summit-credit-union/validation-middleware';
import openapiSpecification from './path/to/openapi/specification';

const app = express();
const validationMiddleware = new ValidationMiddleware(openapiSpecification);

app.use(express.json());
app.use((req, res, next) => {
  validationMiddleware.validate(req, res, next);
});

app.get('/api/example', (req, res) => {
  res.send('This is a valid response!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
```

## Development Mode

The `ValidationMiddleware` constructor accepts an optional `isDevelopment` flag. When set to `true`, detailed error messages will be included in the response. This is useful for debugging during development. By default, this flag is set to `false`.

```typescript
const validationMiddleware = new ValidationMiddleware(apiSpec, true);
```

## API Specification

Make sure to provide a valid OpenAPI specification that the middleware can use for validation. The specification should define the paths, parameters, and schemas that your API will use.

## License

This project is licensed under the MIT License. See the LICENSE file for more details.