Socket
Socket
Sign inDemoInstall

aws-lambda-middleware

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aws-lambda-middleware

AWS Lambda Middleware


Version published
Weekly downloads
18
increased by5.88%
Maintainers
1
Weekly downloads
 
Created
Source

aws-lambda-middleware

AWS Lambda Middleware

You can simply apply Middleware in Lambda. 
Clean code split is possible, and it includes a simple and extensible Parameter PropTypes validater.

 

Install

npm i aws-lambda-middleware

 

Quick setting

const { Middleware, PropTypes } = require('aws-lambda-middleware')


exports.handler = new Middleware().add({
	queryStringParameters: {
		username: PropTypes.string.isRequired,
		age: PropTypes.integer
	}
}).add(async (event, context, prevData) => {
	const query = event.queryStringParameters

	//your code

	return {
		statusCode: 200,
		body: JSON.stringify({
			message: 'success'
		})
	}
})

 

Options

You can set global options and cluster options.
Setting priority is globalOption < clusterOption < callbackResult

callbackData: {Object} Common data applied during callback

const { Middleware, PropTypes } = require('aws-lambda-middleware')

Middleware.globalOption({
	callbackData: {
		headers: { 'Access-Control-Allow-Origin': '*' }
	}
})

Cluster option can be applied to each middleware.

const { Middleware, PropTypes } = require('aws-lambda-middleware')

exports.handler = new Middleware({
	callbackData: {
		headers: { 'Access-Control-Allow-Origin': '*' }
	}
})

 

Middleware

Middleware

constructor

ParamTypeDescription
clusterOptionObjectmiddleware options

add(handler) : {Middleware}

Add Flow handler & ProType rules

ParamTypeDescription
handlerFunction@param {Object} event Lambda event (converted data type)
@param {Object} context Lambda context
@param {Object} prevData Previous handler return data
handlerObjectPropTypes rules
exports.handler = new Middleware().add(async (event, context, prevData) => {
	if (event.source === 'serverless-plugin-warmup') {
		//If Promise.reject() is returned, execute Lambda handler callback(null, rejectValue) without executing next handler
		return Promise.reject('Lambda is warm!')
	}
}).add({
	//PropTypes do not need to be added as a first flow
	body: {
		username: PropTypes.string.isRequired
	}
}).add(async (event, context, prevData) => {
	//code

	return {
		statusCode: 200,
		body: JSON.stringify({
			message: 'success'
		})
	}
})
Example
exports.handler = new Middleware().add({
	queryStringParameters: {
		age: PropTypes.integer.isRequired
	},
	pathParameters: {
		groupId: PropTypes.integer.isRequired
	}
}).add(async (event, context, prevData) => {
	const query = event.queryStringParameters

	if (query.age > 20) {
		return {
			myName: 'jone'
		}
	} else {
		return Promise.reject({
			statusCode: 404,
			body: JSON.stringify({
				message: 'not found'
			})
		})
	}
}).add(async (event, context, prevData) => {
	const pathParam = event.pathParameters

	console.log(prevData.myName) // 'jone'

	return {
		statusCode: 200,
		body: JSON.stringify({
			message: 'success'
		})
	}
})

 

PropTypes

Parameter PropTypes validater

Support Types

TypeDescription
stringString
numberNumber or Numberic string
integerInteger or Integeric string
boolBoolean or Boolean string
arrayArray, isRequired = array.length > 0
exports.handler = new Middleware().add({
	//Validate child property of Lambda event (queryStringParameters, body, pathParameters ...)
	queryStringParameters: {
		//Type + Required
		username: PropTypes.string.isRequired,
		//Only Type (Do not check when there is empty value)
		age: PropTypes.integer
	}
})

addRules(rules)

In addition to the basic rules, new rules can be added.
Adding with the same type name overrides the existing rule.
This setting is applied globally.

ParamTypeDescription
rulesObject-
const { Middleware, PropTypes } = require('aws-lambda-middleware')

PropTypes.addRules({
	//It overrides the existing string rule.
	get string () {
		return PropTypes.makeRule({
			//Valid function to check data type
			validType: (value) => {
				return typeof value === 'string'
			},
			//Valid function to check if it is required
			validRequired: (value) => {
				return value.length > 0
			},
			//A function that converts the value of Paramers when it is incorrectly converted to a string. (Set only when necessary)
			convert: (value) => {
				return String(value)
			}
		})
	},

	//Multiple settings are possible at once
	get number () {
		return PropTypes.makeRule({
			validType: (value) => {
				return ...
			},
			validRequired: (value) => {
				return ...
			},
			convert: (value) => {
				return ...
			}
		})
	}
})

 

Node Version Compatibility

Node.js ^8.3.0

Keywords

FAQs

Package last updated on 30 Mar 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc