2.1.0 • Published 4 months ago

@strata-js/middleware-payload-validation v2.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

Strata Payload Validation Middleware

Payload validation middleware for use with a Strata Service. See the Strata Middleware documentation for more details.

Strata Payload Validation Middleware uses AJV or Zod internally to validate payloads that are passed to the Strata Service.

The following AJV Plugins are included in the middleware:

Installation

This middleware package is published via NPM's npm repository.

// npm
$ npm add @strata-js/middleware-payload-validation

// yarn
$ yarn add @strata-js/middleware-payload-validation

Usage

Setting up payload validation with AJV

A validation configuration must be provided that is an object with the operation name(s) as the property names and a valid JSON Schema as the value. An optional custom error message formatter may be provided that will format the error message according to the supplied function.

import { Context } from '@strata-js/strata';
import { AjvPayloadValidationMiddleware } from '@strata-js/middleware-payload-validation/ajv';
import { DefinedError } from 'ajv';

const context = new Context();

// using the default error formatter
const validationConfig = {
    doSomething: {
        type: 'object',
        required: ['foo', 'bar'],
        properties: {
            foo: { type: 'string', minLength: 2, maxLength: 2, pattern: '^\\d{2}$' },
            bar: { type: 'integer', minimum: 1, maximum: 1000 },
            baz: { enum: [[2, "foo", { foo: 'bar' }, [1, 2, 3]]] }
        }
    }
}
const payloadValidationMiddleware = new AjvPayloadValidationMiddleware(validationConfig);

context.operation('doSomething', async (request): Promise<any> => {
    return this._doSomething(request.payload);
}, [payloadValidationMiddleware]);

// using the optional error formatter
const otherValidationConfig = {
    doSomethingElse: {
        type: 'object',
        required: ['foo'],
        properties: {
            foo: { type: 'string', minLength: 1 }
        }
    }
}
const payloadValidationMiddlewareScrubbed = new AjvPayloadValidationMiddleware(
    otherValidationConfig,
    undefined,
    (errors: DefinedError[]) => {
        return 'Invalid Request: request is not in the correct format';
    }
);

context.operation('doSomethingElse', async (request): Promise<any> => {
    return this._doSomethingElse(request.payload);
}, [payloadValidationMiddlewareScrubbed]);

Setting up payload validation with Zod

A validation configuration must be provided that is an object with the operation name(s) as the property names and a valid Zod Schema as the value.

import { Context } from '@strata-js/strata';
import { ZodPayloadValidationMiddleware } from '@strata-js/middleware-payload-validation/zod';
import { z } from 'zod';

const context = new Context();

// using Zod for validation
const validationConfig = {
    doSomething: z.object({
        foo: z.string().min(2).max(2).regex(/^\d{2}$/),
        bar: z.number().min(1).max(1000),
        baz: z.enum([2, "foo", { foo: 'bar' }, [1, 2, 3]])
    })
}
const payloadValidationMiddleware = new ZodPayloadValidationMiddleware(validationConfig);

context.operation('doSomething', async (request): Promise<any> => {
    return this._doSomething(request.payload);
}, [payloadValidationMiddleware]);

Future Improvements

2.1.0

4 months ago

2.0.0

5 months ago

2.0.0-rc.0

12 months ago

2.0.0-rc.1

12 months ago

1.2.0

2 years ago

1.2.1

2 years ago

1.1.0

3 years ago

1.0.0

4 years ago

0.9.0

4 years ago

0.8.2

4 years ago

0.8.1

4 years ago