@fintalk.ai/lambda-handlers 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +152 -0
  2. package/package.json +67 -0
package/README.md ADDED
@@ -0,0 +1,152 @@
1
+ # `@fintalk-ai/lambda-handlers`
2
+
3
+ Lib para fazer wrapper de lambdas
4
+
5
+ ## Lambda trigada pela API Gateway como proxy (mĂșltiplas rotas numa lambda)
6
+
7
+ ```javascript
8
+ import { LambdaApiProxyHandler, Controller } from '@fintalk-ai/lambda-handlers'
9
+ import { APIGatewayProxyHandler } from 'aws-lambda'
10
+ import authentication from './authentication'
11
+ import foo from './controllers/foo'
12
+
13
+ const api = new LambdaApiProxyHandler({
14
+ base: process.env.ADMIN_API_BASE_PATH,
15
+ })
16
+
17
+ const foo: Controller = (req) => {
18
+ return Promise.resolve({
19
+ body: {
20
+ message: 'Hello World'
21
+ },
22
+ })
23
+ }
24
+
25
+ export const handler: APIGatewayProxyHandler = async (
26
+ event,
27
+ context,
28
+ ) => {
29
+ api.addRoute({
30
+ method: 'GET',
31
+ path: '/',
32
+ run: foo,
33
+ auth: authentication(['admin']),
34
+ })
35
+
36
+ return api.handler(event, context)
37
+ }
38
+ ```
39
+
40
+ ## Lambda trigada pela API Gateway como proxy (uma rota por lambda)
41
+ ```javascript
42
+ import { Controller, LambdaApiHandler } from '@fintalk-ai/lambda-handlers'
43
+ import { APIGatewayProxyHandler } from 'aws-lambda'
44
+
45
+ const getUserController: Controller = async (request) => {
46
+ const user = await getUser(request.params.id)
47
+
48
+ return {
49
+ body: user,
50
+ }
51
+ }
52
+
53
+ const apiHandler = new LambdaApiHandler(getUserController)
54
+
55
+ export const handler: APIGatewayProxyHandler = async (
56
+ event,
57
+ context,
58
+ ) => {
59
+ return apiHandler.handler(event, context)
60
+ }
61
+
62
+ ```
63
+
64
+
65
+ ## Lambda trigada por SQS
66
+
67
+ ```javascript
68
+ import { LambdaSqsHandler, Worker } from '@fintalk-ai/lambda-handlers'
69
+ import { SQSHandler } from 'aws-lambda'
70
+
71
+ interface CreateUserMessage {
72
+ user_id: string
73
+ }
74
+
75
+ const workerCreateUser: Worker<CreateUserMessage> = async (messages) => {
76
+ for (const { body } of messages) {
77
+ const user = await getUser(body.user_id)
78
+ }
79
+ }
80
+
81
+ const sqsHandler = new LambdaSqsHandler(workerCreateUser)
82
+
83
+ export const handler: SQSHandler = async (event) => {
84
+ return sqsHandler.handler(event)
85
+ }
86
+
87
+ ```
88
+
89
+ ## Lambda trigada por SQS (Worker com processamento em paralelo)
90
+
91
+ ```javascript
92
+ import { LambdaSqsHandlerV2, WorkerV2 } from '@fintalk-ai/lambda-handlers'
93
+ import { SQSHandler } from 'aws-lambda'
94
+
95
+ interface CreateUserMessage {
96
+ user_id: string
97
+ }
98
+
99
+ const workerCreateUser: WorkerV2<CreateUserMessage> = async (message, logger) => {
100
+ logger.debug('Start create user')
101
+ const user = await getUser(body.user_id)
102
+ }
103
+
104
+ const sqsHandler = new LambdaSqsHandler({
105
+ worker: workerCreateUser,
106
+ parallel: false,
107
+ service: 'msghandler',
108
+ })
109
+
110
+ export const handler: SQSHandler = async (event) => {
111
+ return sqsHandler.handler(event)
112
+ }
113
+ ```
114
+
115
+ A LambdaSqsHandlerV2 precisa ter o Report Batch Item Failures habilitado. Abaixo exemplo com terraform:
116
+
117
+ ```terraform
118
+ resource "aws_lambda_event_source_mapping" "event_handler" {
119
+ event_source_arn = module.sqs_event_handler.sqs_arn
120
+ function_name = module.event_handler.arn
121
+ batch_size = 1
122
+ function_response_types = ["ReportBatchItemFailures"]
123
+ }
124
+ ```
125
+
126
+ ## Lambda trigada pelo sdk
127
+
128
+ ```javascript
129
+ import { LambdaInvokeHandler, InvokeHandler } from '@fintalk-ai/lambda-handlers'
130
+ import { Handler } from 'aws-lambda'
131
+
132
+ interface CreateUserRequest {
133
+ user_id: string
134
+ }
135
+
136
+ interface CreateUserResponse {
137
+ message: string
138
+ }
139
+
140
+ const createUserInvoke: InvokeHandler<CreateUserRequest, CreateUserResponse> = async (event) => {
141
+ return {
142
+ message: event.user_id
143
+ }
144
+ }
145
+
146
+ const invokeHandler = new LambdaInvokeHandler(createUserInvoke)
147
+
148
+ export const handler: Handler<CreateUserRequest, CreateUserResponse> = async (event) => {
149
+ return invokeHandler.handler(event)
150
+ }
151
+
152
+ ```
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@fintalk.ai/lambda-handlers",
3
+ "version": "1.0.0",
4
+ "description": "> TODO: description",
5
+ "author": "Fintalk.AI",
6
+ "homepage": "https://github.com/fintalk-ai/lambda-handlers#readme",
7
+ "license": "MIT",
8
+ "main": "lib/index.js",
9
+ "directories": {
10
+ "lib": "lib"
11
+ },
12
+ "files": [
13
+ "lib"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/fintalk-ai/lambda-handlers#readme"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "scripts": {
23
+ "clean": "rimraf lib",
24
+ "tsc": "tsc -p tsconfig.build.json",
25
+ "lint": "eslint --cache --ext .ts src/",
26
+ "test": "LOGGER_LEVEL=silent jest",
27
+ "test:coverage": "LOGGER_LEVEL=silent jest --coverage",
28
+ "build": "run-s clean tsc"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/fintalk-ai/lambda-handlers/issues"
32
+ },
33
+ "devDependencies": {
34
+ "@babel/preset-typescript": "^7.16.7",
35
+ "@stone-ton/eslint-config-ton": "^0.1.1",
36
+ "@types/aws-lambda": "^8.10.92",
37
+ "@types/jest": "^27.4.0",
38
+ "@types/node": "^17.0.13",
39
+ "@types/qs": "^6.9.7",
40
+ "@typescript-eslint/eslint-plugin": "^5.10.1",
41
+ "@typescript-eslint/parser": "^5.10.1",
42
+ "esbuild": "^0.14.21",
43
+ "esbuild-jest": "^0.5.0",
44
+ "eslint": "^8.14.0",
45
+ "eslint-config-standard": "^17.0.0",
46
+ "eslint-plugin-import": "^2.26.0",
47
+ "eslint-plugin-n": "^15.2.0",
48
+ "eslint-plugin-promise": "^6.0.0",
49
+ "fintalk-logger": "~1.1.3",
50
+ "jest": "^28.1.3",
51
+ "jest-mock": "^28.1.0",
52
+ "jest-mock-extended": "^2.0.6",
53
+ "node-match-path": "^0.6.3",
54
+ "qs": "^6.10.3",
55
+ "rimraf": "^3.0.2"
56
+ },
57
+ "peerDependencies": {
58
+ "@types/aws-lambda": ">=8.10.92",
59
+ "@types/qs": ">=6.9.7",
60
+ "fintalk-logger": "~1.1.3",
61
+ "node-match-path": ">=0.6.3",
62
+ "qs": ">=6.10.3"
63
+ },
64
+ "dependencies": {
65
+ "typescript": "^5.1.3"
66
+ }
67
+ }