{"id":50490738,"url":"https://github.com/uhop/dynamodb-toolkit-lambda","last_synced_at":"2026-06-02T02:30:57.860Z","repository":{"id":352553986,"uuid":"1215556824","full_name":"uhop/dynamodb-toolkit-lambda","owner":"uhop","description":"AWS Lambda adapter for dynamodb-toolkit — serves the standard REST route pack as a Lambda handler for API Gateway (REST / HTTP), Lambda Function URLs, and ALB. Delegates parsing, envelope building, and policy to dynamodb-toolkit/rest-core.","archived":false,"fork":false,"pushed_at":"2026-05-12T00:46:25.000Z","size":150,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-22T21:44:07.682Z","etag":null,"topics":["adapter","alb","api-gateway","api-gateway-v1","api-gateway-v2","aws-lambda","aws-sdk-v3","crud","dynamodb","dynamodb-toolkit","esm","function-urls","hooks","http","pagination","rest","serverless","toolkit","typescript","zero-dependencies"],"latest_commit_sha":null,"homepage":"https://github.com/uhop/dynamodb-toolkit-lambda#readme","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uhop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-20T03:12:33.000Z","updated_at":"2026-04-23T20:29:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/uhop/dynamodb-toolkit-lambda","commit_stats":null,"previous_names":["uhop/dynamodb-toolkit-lambda"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/uhop/dynamodb-toolkit-lambda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uhop%2Fdynamodb-toolkit-lambda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uhop%2Fdynamodb-toolkit-lambda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uhop%2Fdynamodb-toolkit-lambda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uhop%2Fdynamodb-toolkit-lambda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uhop","download_url":"https://codeload.github.com/uhop/dynamodb-toolkit-lambda/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uhop%2Fdynamodb-toolkit-lambda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33803734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adapter","alb","api-gateway","api-gateway-v1","api-gateway-v2","aws-lambda","aws-sdk-v3","crud","dynamodb","dynamodb-toolkit","esm","function-urls","hooks","http","pagination","rest","serverless","toolkit","typescript","zero-dependencies"],"created_at":"2026-06-02T02:30:57.030Z","updated_at":"2026-06-02T02:30:57.855Z","avatar_url":"https://github.com/uhop.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dynamodb-toolkit-lambda [![NPM version][npm-img]][npm-url]\n\n[npm-img]: https://img.shields.io/npm/v/dynamodb-toolkit-lambda.svg\n[npm-url]: https://npmjs.org/package/dynamodb-toolkit-lambda\n\nAWS Lambda adapter for [`dynamodb-toolkit`](https://github.com/uhop/dynamodb-toolkit) v3. Serves the toolkit's standard REST route pack as a Lambda handler — same wire contract as `dynamodb-toolkit/handler` (the bundled `node:http` adapter), [`dynamodb-toolkit-fetch`](https://github.com/uhop/dynamodb-toolkit-fetch), [`dynamodb-toolkit-koa`](https://github.com/uhop/dynamodb-toolkit-koa), and [`dynamodb-toolkit-express`](https://github.com/uhop/dynamodb-toolkit-express), translated for Lambda's event / result shape.\n\nSupported event sources:\n\n- **API Gateway REST API** (payload format **1.0**).\n- **API Gateway HTTP API** (payload format **2.0**).\n- **Lambda Function URLs** (payload format **2.0**).\n- **Application Load Balancer** (multi-value headers mode and single-value).\n\nShares the wire contract with the bundled `dynamodb-toolkit/handler` and the `-koa` / `-express` / `-fetch` siblings — same routes, same envelope, same status codes, same option surface. Auto-detects the incoming event shape at call time and returns the matching result envelope.\n\n## Install\n\n```sh\nnpm install dynamodb-toolkit-lambda dynamodb-toolkit @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb\n```\n\n`dynamodb-toolkit` is declared as a **peer dependency**. No framework peer dep — AWS Lambda's Node runtime is the target.\n\n## Quick start\n\n### API Gateway HTTP API (payload 2.0) or Lambda Function URL\n\n```js\nimport {DynamoDBClient} from '@aws-sdk/client-dynamodb';\nimport {DynamoDBDocumentClient} from '@aws-sdk/lib-dynamodb';\nimport {Adapter} from 'dynamodb-toolkit';\nimport {createLambdaAdapter} from 'dynamodb-toolkit-lambda';\n\nconst client = DynamoDBDocumentClient.from(new DynamoDBClient({region: process.env.AWS_REGION}));\nconst planets = new Adapter({client, table: 'planets', keyFields: ['name']});\n\nexport const handler = createLambdaAdapter(planets, {mountPath: '/planets'});\n```\n\n### API Gateway REST API (payload 1.0)\n\nSame factory — the adapter auto-detects the payload format from the event shape. The result is the event's corresponding `APIGatewayProxyResult` or `APIGatewayProxyStructuredResultV2`.\n\n### ALB\n\nSame factory — if the target group has **Multi value headers** enabled, the adapter mirrors the `multiValueHeaders` response shape automatically by detecting it on the incoming event.\n\n```js\nexport const handler = createLambdaAdapter(planets, {mountPath: '/planets'});\n```\n\n## Local development\n\nAWS's debugging tools for Lambda-behind-HTTP are cumbersome. This package ships a zero-dep bridge so you can drive the **exact** Lambda code path against real HTTP requests on localhost — no framework dep, no deploy cycle.\n\n### `node:http` — standalone dev server\n\n```js\nimport http from 'node:http';\nimport {createLambdaAdapter} from 'dynamodb-toolkit-lambda';\nimport {createNodeListener} from 'dynamodb-toolkit-lambda/local.js';\n\nconst handler = createLambdaAdapter(planets, {mountPath: '/planets'});\nhttp.createServer(createNodeListener(handler)).listen(3000);\n// curl http://localhost:3000/planets\n```\n\n`createNodeListener` synthesizes a full API Gateway event from each incoming HTTP request (v2 by default; pass `{eventShape: 'v1'}` to test v1-specific paths), invokes the handler, and writes the Lambda result envelope back through the HTTP response. Binary request bodies are base64-encoded before reaching the handler, matching AWS's binary-media-types behavior.\n\n### Fetch runtimes (Bun, Deno, Cloudflare Workers)\n\n```js\nimport {createLambdaAdapter} from 'dynamodb-toolkit-lambda';\nimport {createFetchBridge} from 'dynamodb-toolkit-lambda/local.js';\n\nconst handler = createLambdaAdapter(planets);\nBun.serve({port: 3000, fetch: createFetchBridge(handler)});\n```\n\n### Plug into an existing Koa / Express app\n\nThis package doesn't depend on Koa or Express. Copy ~10 lines to bridge manually:\n\n```js\n// Koa\nimport Koa from 'koa';\nimport {createLambdaAdapter} from 'dynamodb-toolkit-lambda';\nimport {createNodeListener} from 'dynamodb-toolkit-lambda/local.js';\n\nconst listener = createNodeListener(createLambdaAdapter(planets));\nconst app = new Koa();\napp.use(ctx =\u003e listener(ctx.req, ctx.res).then(() =\u003e (ctx.respond = false)));\napp.listen(3000);\n```\n\n```js\n// Express\nimport express from 'express';\nimport {createLambdaAdapter} from 'dynamodb-toolkit-lambda';\nimport {createNodeListener} from 'dynamodb-toolkit-lambda/local.js';\n\nconst listener = createNodeListener(createLambdaAdapter(planets));\nconst app = express();\napp.use((req, res) =\u003e listener(req, res));\napp.listen(3000);\n```\n\nFor a framework-native story without the bridge — share the same `Adapter` instance between a Lambda deployment and a Koa / Express / Fetch dev entry, using `dynamodb-toolkit-koa` / `-express` / `-fetch` directly.\n\n## Compatibility\n\n- **AWS Lambda, Node 20+ runtime.**\n- Payload formats: API Gateway v1 (`APIGatewayProxyEvent`), v2 (`APIGatewayProxyEventV2`), Function URLs (payload 2.0), ALB (`ALBEvent`).\n- `peerDependencies`: `dynamodb-toolkit ^3.1.1` only.\n\n## License\n\n[BSD-3-Clause](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuhop%2Fdynamodb-toolkit-lambda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuhop%2Fdynamodb-toolkit-lambda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuhop%2Fdynamodb-toolkit-lambda/lists"}