https://github.com/cbschuld/lambda-app
Lambda App - Opinionated Lambda App Initialization, Management and Response System
https://github.com/cbschuld/lambda-app
Last synced: 4 months ago
JSON representation
Lambda App - Opinionated Lambda App Initialization, Management and Response System
- Host: GitHub
- URL: https://github.com/cbschuld/lambda-app
- Owner: cbschuld
- Created: 2022-07-04T04:31:36.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-09-08T20:51:23.000Z (almost 3 years ago)
- Last Synced: 2025-02-11T12:41:12.289Z (4 months ago)
- Language: TypeScript
- Size: 156 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Lambda App - Opinionated Lambda App Initialization, Management and Response System
A simplistic and opinionated way to initialize a lambda-based application on AWS, log consistently to CloudWatch and respond to requests from users. The Lambda App system is designed to help minimize app-start and app-response code in serverless applications both through frameworks like serverless.com or the AWS CDK.
## Example Usage
simplistic construction and response
```typescript
export const main: APIGatewayProxyHandlerV2 = async (event, context) => {
const app = new App()
return app.response(HttpStatus.OK)
}
```## Identity Management
Identity request is called by the App runtime via overloading the function `onLoadIdentity`. It is called when the user invokes `init()` from the App instance.
```typescript
class MyApp extends LambdaApp<
MyIdentity,
APIGatewayEventRequestContextV2,
APIGatewayProxyEventV2WithRequestContext
> {
public async onLoadIdentity(request: APIGatewayEventRequestContextV2): Promise {
return Promise.resolve({
user: {
id: 'abc123',
first: 'John',
last: 'Doe'
},
company: 'Acme',
office: 'New York'
})
}
}export const main: APIGatewayProxyHandlerV2 = async (event, context) => {
return new MyApp()
.init({ event, context, options: { authorize: true } })
.then((app) => app.response(HttpStatus.OK))
.catch((app) => app.response(HttpStatus.Forbidden, { error: app.error.message }))
}
```## Tests
Tests are executed via Jest.
```shell script
npm run test
```