@code-like-a-carpenter/lambda-handlers
TypeScript icon, indicating that this package has built-in type declarations

3.2.5 • Public • Published

@code-like-a-carpenter/lambda-handlers

standard-readme compliant

Wrappers to make writing lambda handlers easier

Table of Contents

Install

npm i @code-like-a-carpenter/lambda-handlers

Usage

This package provides various factories for Lambda events. Each factory, at a minimum, adds telemetry to your handler, but also simplifies the interface. For example, the REST handler takes care of JSON serialization and deserialization while the SQS handler lets you think about individual messages rather than the entire event.

All factories force you to prove async callbacks rather than nodebacks.

REST Apis (API Gateway v1

First, use openapi-typescript to generate typescript types from the api.yml that you're passing to CloudFormation.

npx openapi-typescript api.yml --output __generated__/api.ts

Then, use handleRestEvent to define your lambda handler.

import {handleRestEvent} from '@code-like-a-carpenter/lambda-handlers';
import {operations} from './__generated__/api';

export const handler = handleRestEvent<operations['myOperation']>(
    async (event, {context, logger}) => ({
        statusCode: 204,
    })
);

event is a transformed version of the raw Lambda event. The query string and header objects have been replaced with URLSearchParams and Headers, respectively. For content-type: application/json, the body has been parsed into a type-safe object.

context is the Lambda context object.

logger is a Logger from @code-like-a-carpenter/logger scoped to this request.

SQS Events

When you configure your CloudFormation stack, make sure your SQS handler includes

FunctionResponseTypes:
    - BatchRequestFailures

handleSqsEvent will take care of return the correct payload if any message cannot be processed, but it can only do so if the resource has been configured to expect such a response.

import {handleSqsEvent} from '@code-like-a-carpenter/lambda-handlers';

export const handler = handleSqsEvent(async (message, {context, logger}) => {
    logger.info('Received message', {message});
});

message is a single record from the original SQS event.

context is the Lambda context object.

logger is a Logger from @code-like-a-carpenter/logger scoped to this message.

Maintainer

Ian Remmel

Contributing

Please see contributing guidelines at the project homepage.

License

MIT © Ian Remmel 2023 until at least now

Readme

Keywords

none

Package Sidebar

Install

npm i @code-like-a-carpenter/lambda-handlers

Weekly Downloads

24

Version

3.2.5

License

MIT

Unpacked Size

191 kB

Total Files

109

Last publish

Collaborators

  • ianwremmel