3.2.5 • Published 2 months ago

@code-like-a-carpenter/lambda-handlers v3.2.5

Weekly downloads
-
License
MIT
Repository
github
Last release
2 months ago

@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

3.2.5

2 months ago

3.2.4

2 months ago

3.2.3

2 months ago

3.2.2

3 months ago

3.2.1

3 months ago

3.2.0

3 months ago

3.1.0

3 months ago

3.0.0

4 months ago

2.1.0

6 months ago

1.5.2

6 months ago

1.5.1

9 months ago

2.0.0

6 months ago

1.3.4

1 year ago

1.5.0

12 months ago

1.4.0

12 months ago

1.3.3

1 year ago

1.3.2

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

1.2.0

1 year ago

1.1.0

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago