{"_id":"@eduardocalazansjr/lambda-handlers","_rev":"1-fa3977d7f522c8d07325ed92a34ea1a6","name":"@eduardocalazansjr/lambda-handlers","dist-tags":{"latest":"0.2.5-bodyfix"},"versions":{"0.2.4-bodyfix":{"name":"@eduardocalazansjr/lambda-handlers","version":"0.2.4-bodyfix","description":"> TODO: description","author":{"name":"Emerson Katsumi Matsumoto","email":"emerson.matsumoto@pagar.me"},"homepage":"https://github.com/stone-ton/monorepo/tree/main/packages/lambda-handlers#readme","license":"MIT","main":"lib/index.js","directories":{"lib":"lib"},"repository":{"type":"git","url":"git+https://github.com/stone-ton/monorepo.git"},"publishConfig":{"access":"public"},"scripts":{"clean":"rimraf lib","tsc":"tsc -p tsconfig.build.json","lint":"eslint --cache --ext .ts src/","test":"LOGGER_LEVEL=silent jest","test:coverage":"LOGGER_LEVEL=silent jest --coverage","build":"run-s clean tsc"},"bugs":{"url":"https://github.com/stone-ton/monorepo/issues"},"devDependencies":{"@types/aws-lambda":"^8.10.92","@types/qs":"^6.9.7","node-match-path":"^0.6.3","qs":"^6.10.3","ton-logger":"^1.1.2"},"peerDependencies":{"@types/aws-lambda":">=8.10.92","@types/qs":">=6.9.7","node-match-path":">=0.6.3","qs":">=6.10.3","ton-logger":">=1.1.2"},"gitHead":"1bdd8f053d42b3a84679942bef11dc405948616f","_id":"@eduardocalazansjr/lambda-handlers@0.2.4-bodyfix","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-M6AFBuX1ytZ9mYYpJMzHWIPR+/o9jp21v5fB1CG85jD5OvQtiKf+XRUZqZX6uAWvPgDf4fczsgkULQeJ9E5NSg==","shasum":"5bd2d9f3859b1ed7b2a324de0e9378d3972e1cc8","tarball":"https://registry.npmjs.org/@eduardocalazansjr/lambda-handlers/-/lambda-handlers-0.2.4-bodyfix.tgz","fileCount":2,"unpackedSize":4737,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7dwex9WxblkKm33H2uy6ATk7QKd6sXja/+asmE5KsMAiAtksxkvCEMisqANGwEvOsMnnASRybkQ25mQW+B07jJ8A=="}]},"_npmUser":{"name":"eduardocalazansjr","email":"eduardoc_jr@me.com"},"maintainers":[{"name":"eduardocalazansjr","email":"eduardoc_jr@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lambda-handlers_0.2.4-bodyfix_1695950577148_0.6995251533402667"},"_hasShrinkwrap":false},"0.2.5-bodyfix":{"name":"@eduardocalazansjr/lambda-handlers","version":"0.2.5-bodyfix","description":"> TODO: description","author":{"name":"Emerson Katsumi Matsumoto","email":"emerson.matsumoto@pagar.me"},"homepage":"https://github.com/stone-ton/monorepo/tree/main/packages/lambda-handlers#readme","license":"MIT","main":"lib/index.js","directories":{"lib":"lib"},"repository":{"type":"git","url":"git+https://github.com/stone-ton/monorepo.git"},"publishConfig":{"access":"public"},"scripts":{"clean":"rimraf lib","tsc":"tsc -p tsconfig.build.json","lint":"eslint --cache --ext .ts src/","test":"LOGGER_LEVEL=silent jest","test:coverage":"LOGGER_LEVEL=silent jest --coverage","build":"run-s clean tsc"},"bugs":{"url":"https://github.com/stone-ton/monorepo/issues"},"devDependencies":{"@types/aws-lambda":"^8.10.92","@types/qs":"^6.9.7","node-match-path":"^0.6.3","qs":"^6.10.3","ton-logger":"^1.1.2"},"peerDependencies":{"@types/aws-lambda":">=8.10.92","@types/qs":">=6.9.7","node-match-path":">=0.6.3","qs":">=6.10.3","ton-logger":">=1.1.2"},"types":"./lib/index.d.ts","gitHead":"1bdd8f053d42b3a84679942bef11dc405948616f","_id":"@eduardocalazansjr/lambda-handlers@0.2.5-bodyfix","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-LAQV7GMXrRSz5Os7M1keYoCPIVDNZQScSiSMnL/hJ1VFxqxQnf7Mlzv/Frm0F0QmtnZa6MqZxQWqwJ3ktBvOVA==","shasum":"b8122bd066d3f69a6ed85a1bdb731d774bdb1bda","tarball":"https://registry.npmjs.org/@eduardocalazansjr/lambda-handlers/-/lambda-handlers-0.2.5-bodyfix.tgz","fileCount":101,"unpackedSize":109359,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpd+M2I76njf+4e46+CAzUi4r8AkenBbtzB89ji9YO9wIhAO9p95Ok6U+K5SHHpBMfO+o3Rg/LVaryZjm4OX1Nyd5B"}]},"_npmUser":{"name":"eduardocalazansjr","email":"eduardoc_jr@me.com"},"maintainers":[{"name":"eduardocalazansjr","email":"eduardoc_jr@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lambda-handlers_0.2.5-bodyfix_1695950768999_0.7543376885193078"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-29T01:22:57.068Z","0.2.4-bodyfix":"2023-09-29T01:22:57.395Z","modified":"2023-09-29T01:26:09.491Z","0.2.5-bodyfix":"2023-09-29T01:26:09.319Z"},"maintainers":[{"name":"eduardocalazansjr","email":"eduardoc_jr@me.com"}],"description":"> TODO: description","homepage":"https://github.com/stone-ton/monorepo/tree/main/packages/lambda-handlers#readme","repository":{"type":"git","url":"git+https://github.com/stone-ton/monorepo.git"},"author":{"name":"Emerson Katsumi Matsumoto","email":"emerson.matsumoto@pagar.me"},"bugs":{"url":"https://github.com/stone-ton/monorepo/issues"},"license":"MIT","readme":"# `@stone-ton/lambda-handlers`\n\nLib para fazer wrapper de lambdas\n\n## Lambda trigada pela API Gateway como proxy (múltiplas rotas numa lambda)\n\n```javascript\nimport { LambdaApiProxyHandler, Controller } from '@stone-ton/lambda-handlers'\nimport { APIGatewayProxyHandler } from 'aws-lambda'\nimport authentication from './authentication'\nimport foo from './controllers/foo'\n\nconst api = new LambdaApiProxyHandler({\n  base: process.env.ADMIN_API_BASE_PATH,\n})\n\nconst foo: Controller = (req) => {\n  return Promise.resolve({\n    body: {\n      message: 'Hello World'\n    },\n  })\n}\n\nexport const handler: APIGatewayProxyHandler = async (\n  event,\n  context,\n) => {\n  api.addRoute({\n    method: 'GET',\n    path: '/',\n    run: foo,\n    auth: authentication(['admin']),\n  })\n\n  return api.handler(event, context)\n}\n```\n\n## Lambda trigada pela API Gateway como proxy (uma rota por lambda)\n```javascript\nimport { Controller, LambdaApiHandler } from '@stone-ton/lambda-handlers'\nimport { APIGatewayProxyHandler } from 'aws-lambda'\n\nconst getUserController: Controller = async (request) => {\n  const user = await getUser(request.params.id)\n\n  return {\n    body: user,\n  }\n}\n\nconst apiHandler = new LambdaApiHandler(getUserController)\n\nexport const handler: APIGatewayProxyHandler = async (\n  event,\n  context,\n) => {\n  return apiHandler.handler(event, context)\n}\n\n```\n\n\n## Lambda trigada por SQS\n\n```javascript\nimport { LambdaSqsHandler, Worker } from '@stone-ton/lambda-handlers'\nimport { SQSHandler } from 'aws-lambda'\n\ninterface CreateUserMessage {\n  user_id: string\n}\n\nconst workerCreateUser: Worker<CreateUserMessage> = async (messages) => {\n  for (const { body } of messages) {\n    const user = await getUser(body.user_id)\n  }\n}\n\nconst sqsHandler = new LambdaSqsHandler(workerCreateUser)\n\nexport const handler: SQSHandler = async (event) => {\n  return sqsHandler.handler(event)\n}\n\n```\n\n## Lambda trigada por SQS (Worker com processamento em paralelo)\n\n```javascript\nimport { LambdaSqsHandlerV2, WorkerV2 } from '@stone-ton/lambda-handlers'\nimport { SQSHandler } from 'aws-lambda'\n\ninterface CreateUserMessage {\n  user_id: string\n}\n\nconst workerCreateUser: WorkerV2<CreateUserMessage> = async (message, logger) => {\n  logger.debug('Start create user')\n  const user = await getUser(body.user_id)\n}\n\nconst sqsHandler = new LambdaSqsHandler({\n  worker: workerCreateUser,\n  parallel: false,\n  service: 'migraton',\n})\n\nexport const handler: SQSHandler = async (event) => {\n  return sqsHandler.handler(event)\n}\n```\n\nA LambdaSqsHandlerV2 precisa ter o Report Batch Item Failures habilitado. Abaixo exemplo com terraform:\n\n```terraform\nresource \"aws_lambda_event_source_mapping\" \"event_handler\" {\n  event_source_arn        = module.sqs_event_handler.sqs_arn\n  function_name           = module.event_handler.arn\n  batch_size              = 1\n  function_response_types = [\"ReportBatchItemFailures\"]\n}\n```\n\n## Lambda trigada pelo sdk\n\n```javascript\nimport { LambdaInvokeHandler, InvokeHandler } from '@stone-ton/lambda-handlers'\nimport { Handler } from 'aws-lambda'\n\ninterface CreateUserRequest {\n  user_id: string\n}\n\ninterface CreateUserResponse {\n  message: string\n}\n\nconst createUserInvoke: InvokeHandler<CreateUserRequest, CreateUserResponse> = async (event) => {\n  return {\n    message: event.user_id\n  }\n}\n\nconst invokeHandler = new LambdaInvokeHandler(createUserInvoke)\n\nexport const handler: Handler<CreateUserRequest, CreateUserResponse> = async (event) => {\n  return invokeHandler.handler(event)\n}\n\n```\n","readmeFilename":"README.md"}