Repository navigation
Releases: aws-powertools/powertools-lambda-typescript
Release list
v2.36.0
Summary
In this release, we've expanded the Lambda layer to include all 14 published Powertools packages. Data Masking, Signer, Kafka, and Validation are now available directly from the layer, making it easier to use these utilities without bundling the Powertools packages separately.
Important for Lambda layer users: We've changed how the layers are built and no longer include the AWS SDK for JavaScript v3 clients we previously bundled. We still recommend bundling the SDK packages your function needs so you control their versions. Your bundled SDK takes precedence; if you don't bundle one, Powertools falls back to the SDK provided by the Lambda Node.js runtime. Remove any build exclusions that assumed the Powertools layer supplied the SDK.
We've also made JSON-only Kafka consumers easier to bundle and added Parser support for WITH_METADATA deliveries from the new enhanced Custom Event Bus in Amazon EventBridge.
We've fixed Valkey-backed idempotency when using @valkey/valkey-glide. Previously, the persistence layer passed Redis-client write options that Glide ignored, so records and locks could be written without expiry or conditional-write protection. The persistence layer now passes the correct options, restoring the expected record expiry and protection against duplicate processing. If you use Valkey Glide, we recommend upgrading.
Other Idempotency fixes keep operations tied to the correct record when your handler modifies its input or multiple idempotent functions share a persistence instance, preventing stuck in-progress records and incorrect updates. The HTTP Event Handler also preserves binary response bodies and correctly handles responses with no body, so you can serve files or return 204 No Content without workarounds.
This release also includes several other bug fixes, minor improvements, and documentation updates, with the help of the community.
⭐ Congratulations to @pttydou, @vaibhav8a, @sabaighani, @vahidshaik1901, @Provokke, @victoriademina, @proton0210, and @karthiksenv for their first PRs merged in the project, and thanks to @vishwakt for their many contributions to this release 🎉
More utilities in the Lambda layer
The Lambda layer now includes all 14 published Powertools packages. Data Masking, Signer, Kafka, and Validation were previously missing, so you can now use those utilities from the layer rather than bundling the Powertools packages separately.
The layer also no longer bundles AWS SDK v3 clients. This avoids mixing layer-provided clients with a different SDK version from the Lambda runtime, which could cause failures when using the DynamoDB DocumentClient.
EventBridge Custom Event Bus support
Parser now supports WITH_METADATA subscriber deliveries from the new enhanced Custom Event Bus in Amazon EventBridge, which is distinct from Custom Event Bus – Classic. Each delivered record contains the event in Data, optional custom metadata in Metadata, and delivery information in SystemMetadata, such as whether the event is live or replayed.
import { parse } from '@aws-lambda-powertools/parser';
import { EventBridgeWithMetadataEnvelope } from '@aws-lambda-powertools/parser/envelopes';
import { z } from 'zod';
const orderSchema = z.object({
orderId: z.string(),
amount: z.number(),
});
export const handler = async (event: unknown) => {
const orders = parse(event, EventBridgeWithMetadataEnvelope, orderSchema);
return orders;
};Use EventBridgeWithMetadataRecordSchema or EventBridgeWithMetadataSchema when you need to retain the event and its metadata. The record schema also supports single-object deliveries.
Simpler Kafka bundles
If your Kafka consumer only handles JSON, you no longer need to install avro-js and protobufjs just to make your function bundle successfully. These libraries are now optional dependencies loaded only when their corresponding format is configured, so you can leave unused codecs out of your deployment.
If you use Avro or Protocol Buffers, install the corresponding library and include it in your deployment.
Changes
- chore(deps): apply available npm audit fixes (#5790) by @svozza
- test(batch): add Lambda Managed Instances isolation coverage (#5768) by @karthiksenv
- fix(parser): accept real Cognito trigger events from common flows (#5777) by @vishwakt
- docs(parser): fix schema names in built-in schemas table (#5784) by @vishwakt
- feat(parser): support EventBridge WITH_METADATA deliveries (#5776) by @proton0210
- refactor(idempotency): make DynamoDB error check minification-resistant (#5775) by @dreamorosi
- fix(parser): accept multi-value headers in VPC Lattice v2 events (#5773) by @vishwakt
- fix(parser): accept documented SES receipt event variants (#5772) by @vishwakt
- fix(parser): keep PhysicalResourceId in CloudFormation events (#5767) by @proton0210
- refactor(tracer): track fetch subsegments per request (#5746) by @victoriademina
- fix(idempotency): pass cache SET options in the Valkey Glide shape (#5737) by @Provokke
- fix(tests): deterministic LMI e2e overlap and capacity provider headroom (#5736) by @svozza
- fix(parser): keep transform errors as the ParseError cause (#5745) by @svozza
- fix(parser): keep Lambda authorizer context in the REST API event schema (#5749) by @vishwakt
- fix(idempotency): bind operations to their own key prefix on a shared store (#5708) by @svozza
- fix(batch): throw when a synchronous processor gets a promise-returning handler (#5650) by @vahidshaik1901
- fix(event-handler): honor Accept-Encoding q-values in compression (#5725) by @arnabrahman
- fix(idempotency): complete and delete the record acquired at operation start (#5717) by @vishwakt
- fix(idempotency): keep payload validation hash on cache record completion (#5706) by @svozza
- fix(event-handler): handle empty proxy response bodies (#5701) by @svozza
- fix(event-handler): preserve binary Web Response bodies (#5700) by @svozza
- chore(tests): split custom Vitest matchers out of setupEnv (#5704) by @svozza
- fix(event-handler): stop recursive HTTP error handler dispatch (#5703) by @svozza
- chore(tests): centralise TypeScript test configuration (#5695) by @svozza
- refactor(event-handler): simplify HTTP event parsing (#5686) by @svozza
- chore(tests): replace aws-sdk-client-mock-vitest with local matcher (#5693) by @svozza
- fix(ci): skip unrelated release workflows without approval (#5688) by @svozza
- fix(event-handler): ignore body on GET/HEAD requests when converting to Web Request (#5683) by @sabaighani
- fix(idempotency): retain cache locks without execution deadlines (#5680) by @svozza
- chore(tests): add Metrics e2e suite for Lambda Managed Instances (#5663) by @svozza
- fix(idempotency): delete only acquired records in the Middy onError hook (#5676) by @svozza
- fix(event-handler): honour isBase64Encoded and binary bodies on proxy results (#5668) by @svozza
- chore(ci): align cached-node-modules pins and drop a stale header comment (#5665) by @svozza
- chore(ci): remove the unused Publish Package workflow (#5664) by @svozza
- fix(parser): stop malformed base64 from escaping safeParse (#5666) by @vishwakt
- docs(maintenance): explain how to test invocation-scoped state (#5661) by @svozza
- fix(ci): harden the release manifest patch and e2e sweep incident lookup (#5662) by @svozza
- chore(maintenance): pin Python 3.14 across the docs toolchain (#5648) by @svozza
- chore(maintenance): align CI matrices and repository templates (#5635) by @dreamorosi
- chore(ci): derive workflow matrices from the root workspaces list (#5638) by @svozza
- fix(maintenance): normalize package test scripts (#5653) by @dreamorosi
- chore(ci): convert the scripts in .github/scripts to ESM (#5640) by @svozza
- chore(maintenance): retire sample application (#5634) by @dreamorosi
- docs(maintenance): retire stale process docs (#5618) by @dreamorosi
- chore(maintenance): make the root tsconfig an options base with no program (#5646) by @svozza
- fix(event-handler): fail invocation on UnauthorizedException in onPublish (#5621) by @svozza
- fix(data-masking): honor throwOnMissingField consistently and resolve paths before masking (#5630) by @svozza
- fix(batch): populate response() before full batch throw and normalize non-Error throws (#5625) by @svozza
- fix(parameters): include request options in cache key (#5623) by @svozza
- refactor(commons): extract InvokeStore fallback into InvocationScoped (#5615) by @dreamorosi
- chore(deps): bump click to 8.3.3 in docs requirements (#5616) by @dreamorosi
- chore(ci): auto-merge non-major Dependabot GitHub Actions updates (#5608) by @svozza
- docs: add CODING_STANDARDS.md agent-facing coding reference (#5598) by @dreamorosi
- chore(tests): add scheduled sweeper for leaked e2e infrastructure (#5599) by @dreamorosi
- chore(layers): replace shell filesystem commands (#5596) by @dreamorosi
- chore(tests): add LMI e2e suite and run-scoped shared capacity provider (#5465) by @svozza
- chore(maintenance): move dev tooling to devDependencies in private workspaces (#5595) by @svozza
- ci(maintenance): auto-merge Dependabot dev dependency updates (#5568) by @svozza
- fix(layers): bundle all publishable utilities in the Lambda layer (#5577) by @svozza
- fix(kafka): lazily import Avro and Protobuf codecs so JSON-only con...
v2.35.0
Summary
In this release, the Parameters utility gains support for the AWS AppConfig Agent Lambda extension. A new getConfig function fetches application configurations from the agent's local HTTP endpoint, without the AWS SDK and without a cache to manage, since caching, polling, and prefetching are all handled by the agent.
In Logger, the log buffer and the debug sampling log level are now scoped per invocation under Lambda Managed Instances concurrency, so concurrent invocations no longer clear each other's buffered logs or override each other's sampling decision. Logger also now accepts IANA timezone aliases such as Asia/Kolkata in the TZ environment variable, which were previously rejected and produced timestamps for the wrong instant. When a timezone can't be resolved at all, Logger now falls back to UTC consistently and emits a warning, instead of doing so silently.
The Parser utility adds a schema for Amazon Connect Outbound Campaigns custom action events.
Finally, the documentation site has been restyled to match the AWS Developer Guide.
Important
The project's Discord server has been shut down. Community conversations now happen in GitHub Discussions, and all Discord links in the READMEs, docs, and issue templates now point there.
⭐ Congratulations to @leiwilson for their first PR merged in the project 🎉
AppConfig Agent support
If you use the AWS AppConfig Agent Lambda extension, you can now fetch application configurations from the agent's local HTTP endpoint with getConfig:
import { getConfig } from '@aws-lambda-powertools/parameters/appconfig-agent';
const config = await getConfig('my-configuration', {
environment: 'my-env',
application: 'my-app',
transform: 'json',
});
export const handler = async (): Promise<void> => {
console.log(config);
};A few things to know:
- You must add the AppConfig Agent Lambda extension layer to your function.
getConfigtalks to it over the agent's local endpoint, so it doesn't need the AWS SDK. - Because the agent handles caching, polling, and prefetching, the
maxAgeandforceFetchoptions don't apply. You can reduce cold start latency by settingAWS_APPCONFIG_EXTENSION_PREFETCH_LISTso the agent fetches your configuration before your handler runs. - When the configuration doesn't exist,
getConfigreturnsundefined, so you can fall back with??, or setthrowOnMissingto get aParameterNotFoundErrorinstead. Any other failure to reach the agent throws aGetParameterError. - Outside of Lambda, or when
POWERTOOLS_DEVis enabled,getConfigreturnsundefinedwithout making a request, so your tests never need to mock the agent. SetPOWERTOOLS_APPCONFIG_AGENT_RETURN_VALUEwhen you want it to return a value instead.
Changes
- refactor(logger): isolate log level InvokeStore access in a store (#5548) by @vishwakt
- fix(logger): scope log buffer per invocation under LMI concurrency (#5543) by @vishwakt
- fix(logger): scope debug sampling log level per invocation under LMI concurrency (#5544) by @vishwakt
- chore(ci): remove boring-cyborg and semantic config files (#5535) by @dreamorosi
- chore(ci): remove greetings now handled by oss-automation (#5532) by @dreamorosi
- chore: replace Discord server with GitHub Discussions (#5530) by @dreamorosi
- docs: restyle documentation to match AWS Developer Guide (#5426) by @dreamorosi
- chore(ci): group CodeQL Action Dependabot updates (#5521) by @dreamorosi
- docs(metrics): document InvokeStore isolation and local testing (#5486) by @leiwilson
- ci: replace CodeQL default setup with advanced setup for fork PRs (#5507) by @svozza
- feat(parser): add schema for Amazon Connect Outbound Campaigns (#5502) by @dreamorosi
- feat(ci): auto-trigger make-release and docs rebuild on PR merge (#5487) by @svozza
- feat(ci): fold GovCloud/China layer publishing into Make Release (#5462) by @svozza
- feat(parameters): add support for AppConfig Agent (#5399) by @svozza
- chore: clean up issue templates (#5470) by @dreamorosi
- chore(ci): remove SonarCloud integration (#5468) by @dreamorosi
- docs(readme): add Signer, Data Masking, and Kafka utilities (#5464) by @svozza
- fix(logger): accept resolvable IANA timezone aliases in timestamps (#5458) by @dreamorosi
- fix(ci): skip paused regions in update_layer_arn.sh (#5457) by @dreamorosi
- docs(maintainers): remove stale layer version note-taking instruction (#5454) by @svozza
🔧 Maintenance
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#5524) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.5.0 to 2.5.1 (#5559) by @dependabot[bot]
- chore(deps): bump the codeql-action group across 1 directory with 3 updates (#5562) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.5.7 to 2.5.8 (#5560) by @dependabot[bot]
- chore(deps-dev): bump @redis/client from 6.2.0 to 6.2.1 (#5558) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 48 updates (#5553) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.7.1 to 8.7.2 (#5551) by @dependabot[bot]
- chore(deps): bump esbuild from 0.28.1 to 0.28.2 (#5552) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 5.0.6 to 5.0.7 (#5549) by @dependabot[bot]
- chore(deps): bump @types/node from 26.1.2 to 26.2.0 (#5550) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.5.6 to 2.5.7 (#5547) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 in /docs (#5546) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.57 to 3.1.58 in /docs (#5545) by @dependabot[bot]
- chore(deps): bump the codeql-action group across 1 directory with 3 updates (#5540) by @dependabot[bot]
- chore(deps-dev): bump undici-types from 8.9.0 to 8.10.0 (#5539) by @dependabot[bot]
- chore(deps): bump constructs from 10.8.0 to 10.8.1 (#5538) by @dependabot[bot]
- chore(deps): bump the codeql-action group across 1 directory with 3 updates (#5536) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 13 updates (#5534) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.54 to 3.1.57 in /docs (#5529) by @dependabot[bot]
- chore(deps-dev): bump @redis/client from 6.1.0 to 6.2.0 (#5527) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 5.0.5 to 5.0.6 (#5528) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 65 updates (#5523) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 17.2.0 to 17.3.0 (#5525) by @dependabot[bot]
- chore(deps): bump the codeql-action group across 1 directory with 3 updates (#5526) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.5.5 to 2.5.6 (#5510) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.6.0 to 7.7.0 (#5513) by @dependabot[bot]
- chore(deps): bump @types/node from 26.1.1 to 26.1.2 (#5509) by @dependabot[bot]
- chore(deps): bump constructs from 10.7.1 to 10.8.0 (#5517) by @dependabot[bot]
- chore(deps): bump actions/stale from 10.4.0 to 11.0.0 (#5508) by @dependabot[bot]
- chore(deps-dev): bump markdownlint-cli2 from 0.23.1 to 0.23.2 (#5505) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 in /docs (#5504) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.52 to 3.1.54 in /docs (#5503) by @dependabot[bot]
- chore(deps-dev): bump @aws-crypto/client-node from 5.0.0 to 5.0.2 (#5499) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 17.1.1 to 17.2.0 (#5496) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 6.2.2 to 6.2.3 (#5495) by @dependabot[bot]
- chore(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#5497) by @dependabot[bot]
- chore(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#5498) by @dependabot[bot]
- chore(deps-dev): bump undici-types from 8.8.0 to 8.9.0 (#5500) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.50 to 3.1.52 in /docs (#5494) by @[dependabot[bot]](https://gi...
v.2.34.0
Summary
This release introduces two new utilities: Signer, for signing HTTP requests to AWS services with SigV4, and Data Masking, for encrypting, decrypting, or irreversibly erasing sensitive fields in your event data.
We've also fixed three bugs affecting Logger and Tracer under [Lambda Managed Instances](https://docs.aws.amazon.com/lambda/latest/dg/managed-instances.html(LMI) concurrency, where multiplexing several invocations into the same execution environment could cause log lines and X-Ray trace data from one invocation to leak into another.
On top of that, Metrics now supports automatic flushing via the using keyword, Parameters gained an opt-in throwOnMissing option to fail fast on missing values, and Idempotency now warns when a shared persistence layer instance receives a reconfiguration it silently ignores. We've also fixed a Metrics bug where a metric name colliding with a dimension or metadata key could silently corrupt the CloudWatch EMF payload, along with a couple of HTTP Router fixes: a crash affecting bundles that don't install Metrics, and unreachable routes caused by trailing slashes.
⭐ Congratulations to @kimnamu for their first PR merged in the project and thank you to @vishwakt and @Zelys-DFKH for their contributions too. 🎉
Signer
The new @aws-lambda-powertools/signer package signs HTTP requests using AWS Signature Version 4 (SigV4), so you can call IAM-authenticated endpoints — API Gateway, Lambda function URLs, AppSync — from within your Lambda functions.
Signing and sending are kept separate: SigV4Signer signs a web-standard Request and performs no network I/O, while createSignedFetcher gives you a drop-in signed fetch for when you just want to sign and send in one step. By default, the signer reads credentials and region from the Lambda runtime environment, so no extra dependencies or configuration are required.
import { SigV4Signer } from '@aws-lambda-powertools/signer/sigv4';
const signer = new SigV4Signer({ service: 'execute-api' });
export const handler = async () => {
const signed = await signer.sign(
'https://example.execute-api.us-east-1.amazonaws.com/items'
);
// `signed` is a standard `Request` with the SigV4 headers added
const response = await fetch(signed);
await response.json();
};Data Masking
The new @aws-lambda-powertools/data-masking package lets you encrypt, decrypt, or irreversibly erase sensitive fields within nested event data, using the AWS Encryption SDK and envelope encryption with AWS KMS for encrypt/decrypt operations.
import { DataMasking } from '@aws-lambda-powertools/data-masking';
const masker = new DataMasking();
export const handler = async (event: { body: Record<string, unknown> }) => {
const data = event.body;
return masker.erase(data, {
fields: ['email', 'address.street', 'company_address'],
});
};Custom masking rules — partial masking via regex, dynamic-length masks, or a fixed replacement string — are also supported for cases where the default ***** placeholder isn't enough.
Lambda Managed Instances concurrency fixes
Under Lambda Managed Instances, multiple invocations can be multiplexed into the same execution environment. Logger and Tracer previously stored per-invocation state (the Lambda context, the active X-Ray segment, and middleware-scoped subsegments) in shared instance variables rather than scoping it per invocation, so concurrent invocations could stomp on each other's state:
- Logger could emit log lines with the wrong
function_request_id,tenant_id, andcold_start— the values from whichever invocation last calledaddContext(). - Tracer could attach
putAnnotation/putMetadatacalls, captured responses, and captured errors to the wrong invocation's trace, and thecaptureLambdaHandlermiddy middleware could close the wrong subsegment or leave one open.
Both utilities now scope this state per invocation using the Lambda Invoke Store, matching the approach already used by Metrics and Batch, so trace and log data stay correctly attributed to the invocation that produced them.
Automatic metric flushing with using
Metrics now implements Disposable, so on Node.js 24+ you can flush stored metrics automatically when a using binding leaves scope — including when an exception is thrown — without a manual try/finally block or the middleware/decorator.
import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
const metrics = new Metrics({
namespace: 'serverlessAirline',
serviceName: 'orders',
});
export const handler = async (): Promise<void> => {
using _ = metrics.addMetric('successfulBooking', MetricUnit.Count, 10);
// metrics are flushed automatically when the scope exits, including on errors
};Changes
- chore(testing): use stackEventPollingInterval option, drop CDK patch (#5447) by @svozza
- fix(tracer): isolate active segment per invocation under LMI concurrency (#5446) by @svozza
- fix(idempotency): recompute key prefix from base on each configure call (#5442) by @dreamorosi
- fix(tracer): scope middy middleware segments per invocation (#5444) by @vishwakt
- feat(parser): add errorHandler option for inline parse error handling (#5352) by @Zelys-DFKH
- refactor(logger): remove unsafe context cast in createChild (#5443) by @dreamorosi
- feat(idempotency): warn when persistence layer reconfiguration is ignored (#5422) by @dreamorosi
- chore(skills): make create-issue checkbox handling template-driven (#5439) by @svozza
- fix(logger): scope lambda context per invocation under LMI concurrency (#5430) by @svozza
- docs(event-handler): mention HTTP event handler in package README (#5432) by @svozza
- docs(event-handler): note Bedrock Agents maintenance mode (#5425) by @dreamorosi
- refactor(commons): extract shared isRunningInLambda helper (#5424) by @dreamorosi
- refactor(testing): remove withResolvers polyfill, use native method (#5427) by @dreamorosi
- chore(deps): bump transitive protobufjs from 7.5.8 to 7.6.5 (#5421) by @dreamorosi
- feat(signer): add SigV4 request signing utility (#5344) by @dreamorosi
- docs(idempotency): explain persistence layer reuse across multiple operations (#5419) by @dreamorosi
- docs: document npm package name reservation in maintainers playbook (#5418) by @dreamorosi
- chore(governance): add shared agent skills for creating issues and PRs (#5407) by @svozza
- ci: slow CDK stack-event polling to avoid CFN throttling (#5405) by @svozza
- chore(tests): prevent sentinel key collision in data-masking property test (#5392) by @svozza
- ci(layers): update SSM latest parameter on release (#5369) by @dreamorosi
- chore(maintenance): remove DOM lib, use undici-types for fetch types (#5351) by @svozza
- fix(event-handler): preserve original string for invalid Bedrock Agent number params (#5363) by @kimnamu
- feat(metrics): add Disposable support for automatic flushing via using (#5349) by @svozza
- feat(data-masking): add Data Masking utility (#5143) by @svozza
- feat(parameters): add throwOnMissing option to fail fast on missing values (#5343) by @dreamorosi
- chore(ci): type-check examples/snippets and fix uncovered errors (#5348) by @dreamorosi
- refactor(event-handler): extract shared IP-extraction util for HTTP middleware (#5346) by @dreamorosi
- feat(event-handler): add HTTP request/response data to tracer subsegment (#5338) by @dreamorosi
- build(internal): add test compilation check to package builds (#5336) by @dreamorosi
- feat(event-handler): warn when AppSync Events payload exceeds 240 KB per-event limit (#5339) by @dreamorosi
- chore: approve install scripts for npm v12 allowScripts (#5340) by @svozza
- chore: clear npm audit on
aws-cdk-libtransitive dep (#5328) by @dreamorosi - ci(maintenance): remove PR/branch checkout input from Run e2e Tests workflow (#5326) by @dreamorosi
- test(event-handler): fix stale httpRouter e2e trailing-slash test (#5314) by @svozza
- fix(event-handler): avoid runtime import of metrics package in HTTP metrics middleware (#5310) by @vishwakt
- chore(commons): guard UA string against duplicate PTEnv suffix (#5311) by @svozza
- fix(event-handler): correct InvalidHttpMethodError name (#5254) by @svozza
- chore(idempotency): bump @aws/durable-execution-sdk-js to ^1.1.6 (#5298) by @svozza
- fix(event-handler): normalize trailing slashes in HTTP Router prefix joining (#5255) by @svozza
- fix(commons): clear LRUCache pointers on eviction of last item (#5295) by @vishwakt
- chore(deps): bump aws-cdk and aws-cdk-lib to clear fast-uri advisories (#5292) by @svozza
- fix(metrics): detect key collisions between dimensions, metrics, and metadata (#5240) by @Zelys-DFKH
🔧 Maintenance
- chore(deps): bump soupsieve from 2.7 to 2.8.4 in /docs (#5437) by @dependabot[bot]
- chore(deps-dev): bump fast-check from 4.8.0 to 4.9.0 (#5436) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.5.2 to 2.5.3 (#5414) by @dependabot[bot]
- chore(deps): bump github/codeql-action/upload-sarif from 4.36.3 to 4.37.0 (#5413) by @dependabot[bot]
- chore(deps): bump arktype from 2.2.2 to 2.2.3 (#5415) by @dependabot[bot]
- chore(deps): bump @types/node from 26.1.0 to 26.1.1 (#5416) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 6.2.1 to 6.2.2 (#5412) by @dependabot[bot]
- chore(deps-dev): bump @aws/d...
v2.33.1
Summary
This release is mainly composed of bug fixes across the HTTP event handler, Metrics, Logger, and Parser utilities, along with the removal of Node.js 20 support now that the runtime has reached end-of-life on AWS Lambda.
In the HTTP event handler, we have fixed response header corruption where multi-attribute headers like Set-Cookie (with Expires dates) and other comma-containing values were being incorrectly split into multiple headers. The HTTP event handler also now correctly preserves PATCH request bodies on ALB events and returns the proper 204 response for CORS preflight requests that omit the Access-Control-Request-Headers header.
In Metrics, dimension limits are now enforced per-array rather than across the merged set, preventing CloudWatch EMF rejections when default and request-scoped dimensions overlap. Logger now flushes the log buffer when critical() is called with flushOnErrorLog enabled, matching the behaviour of error().
Important
Node.js 20 is no longer supported. Node.js 20 reached end-of-life on AWS Lambda, so this release drops support for it. If you are still on Node.js 20, we recommend upgrading to Node.js 22 before updating Powertools.
⭐ Congratulations to @vishwakt and @nanookclaw for their first PRs merged in the project 🎉
Changes
- chore(deps): fix npm audit vulnerabilities (#5269) by @svozza
- fix(event-handler): allow cors preflight without request headers (#5267) by @vishwakt
- fix(event-handler): preserve ALB PATCH bodies (#5259) by @nanookclaw
- fix(event-handler): restrict v1/alb comma header splitting to an allowlist (#5257) by @vishwakt
- fix(parser): cognito validationData may be null (#5250) by @bdellegrazie
- fix(metrics): enforce dimension limits per-array (#5229) by @vishwakt
- improv(docs): fixed the docs to mention middy support for v7.x (#5238) by @sdangol
- fix(metrics): account for all dimensions in setDefaultDimensions() li… (#5228) by @vishwakt
- fix(logger): flush log buffer on critical() when flushOnErrorLog is e… (#5227) by @vishwakt
- fix(metrics): clear state in publishStoredMetrics even when throwOnEmptyMetrics throws (#5213) by @svozza
- chore: drop Node.js 20 support (#5218) by @svozza
- fix(commons): prevent deepMerge from mutating source objects (#5202) by @svozza
- fix(commons): correctly handle shared references in deepMerge (#5195) by @svozza
- ci(maintenance): Remove release comment automation (#5193) by @dreamorosi
- fix(logger): correctly serialize shared object references in JSON replacer (#5186) by @svozza
🔧 Maintenance
- chore(deps-dev): bump protobufjs from 8.4.0 to 8.4.2 (#5285) by @dependabot[bot]
- chore(deps): bump actions/stale from 10.2.0 to 10.3.0 (#5279) by @dependabot[bot]
- chore(deps): bump idna from 3.10 to 3.15 in /docs (#5274) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.3.0 to 8.4.0 (#5270) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 10.21.2 to 10.21.3 in /docs (#5275) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5277) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.3.1 to 2.4.0 (#5271) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 17.0.4 to 17.0.5 (#5272) by @dependabot[bot]
- chore(deps): bump @types/node from 25.8.0 to 25.9.1 (#5276) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.35.4 to 4.35.5 (#5264) by @dependabot[bot]
- chore(deps-dev): bump @aws/durable-execution-sdk-js from 1.1.2 to 1.1.3 (#5265) by @dependabot[bot]
- chore(deps): bump @types/node from 25.7.0 to 25.8.0 (#5266) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.2.0 to 8.3.0 (#5253) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.48 to 3.1.50 in /docs (#5234) by @dependabot[bot]
- chore(deps): bump urllib3 from 2.6.3 to 2.7.0 in /docs (#5239) by @dependabot[bot]
- chore(deps): bump @types/node from 25.6.0 to 25.7.0 (#5244) by @dependabot[bot]
- chore(deps-dev): bump fast-check from 4.7.0 to 4.8.0 (#5247) by @dependabot[bot]
- chore(deps): bump actions/dependency-review-action from 4.9.0 to 5.0.0 (#5241) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5242) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 17.0.2 to 17.0.4 (#5243) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.14 to 2.4.15 (#5245) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.0.3 to 8.2.0 (#5246) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.2.1 to 7.3.0 (#5231) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.35.3 to 4.35.4 (#5230) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.47 to 3.1.48 in /docs (#5226) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 6.1.0 to 6.1.1 (#5223) by @dependabot[bot]
- chore(deps): bump valibot from 1.3.1 to 1.4.0 (#5224) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 16.4.0 to 17.0.2 (#5225) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.4.1 to 4.4.3 (#5221) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.13 to 2.4.14 (#5222) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.35.2 to 4.35.3 (#5219) by @dependabot[bot]
- chore(deps-dev): bump @aws/durable-execution-sdk-js from 1.1.1 to 1.1.2 (#5220) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.2.0 to 7.2.1 (#5216) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.3.6 to 4.4.1 (#5217) by @dependabot[bot]
- chore(deps): bump ajv from 8.18.0 to 8.20.0 (#5214) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.0.1 to 8.0.3 (#5215) by @dependabot[bot]
- chore(deps): bump gitpython from 3.1.43 to 3.1.47 in /docs (#5211) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.12 to 2.4.13 (#5203) by @dependabot[bot]
- chore(deps-dev): bump markdownlint-cli2 from 0.22.0 to 0.22.1 (#5201) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5199) by @dependabot[bot]
- chore(deps): bump actions/setup-node from 6.3.0 to 6.4.0 (#5198) by @dependabot[bot]
- chore(deps): bump typescript from 6.0.2 to 6.0.3 in the typescript group across 1 directory (#5197) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.35.1 to 4.35.2 (#5188) by @dependabot[bot]
- chore(deps-dev): bump @aws/durable-execution-sdk-js from 1.1.0 to 1.1.1 (#5194) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.11 to 2.4.12 (#5189) by @dependabot[bot]
- chore(deps-dev): bump @redis/client from 5.12.0 to 5.12.1 (#5190) by @dependabot[bot]
- chore(deps-dev): bump @redis/client from 5.11.0 to 5.12.0 (#5185) by @dependabot[bot]
This release was made possible by the following contributors:
@bdellegrazie, @dependabot[bot], @dreamorosi, @github-actions[bot], @nanookclaw, @sdangol, @svozza, @vishwakt, dependabot[bot] and github-actions[bot]
v2.33.0
Summary
In this release, the HTTP event handler gains a new metrics middleware that lets you emit per-request latency, fault, and error metrics with a single line of configuration. The middleware automatically uses the matched route as a dimension and attaches request metadata like HTTP method, path, status code, and API Gateway request IDs.
We've also improved the parser package by exporting InferOutput from the public types entry point, resolving a TypeScript declaration emit error (TS2883) that affected consumers using safeParse mode — particularly those upgrading to TypeScript 6.
⭐ Congratulations to @yashar-new10 and @faberchri for their first PR merged in the project 🎉
Metrics Middleware
You can now use the Metrics utility with the HTTP event handler to automatically emit CloudWatch metrics for every request. The middleware:
- Adds the matched route as a metric dimension (e.g.,
GET /users/:id) - Emits
latency(Milliseconds),fault(Count), anderror(Count) metrics - Attaches request metadata including
httpMethod,path,statusCode,userAgent, andipAddress - Adds API Gateway-specific metadata (
apiGwRequestId,apiGwApiId) when available - Uses
NOT_FOUNDas the route dimension when no route matches, preventing dimension explosion
import { Router } from '@aws-lambda-powertools/event-handler/http';
import { metrics as metricsMiddleware } from '@aws-lambda-powertools/event-handler/http/middleware/metrics';
import { Metrics } from '@aws-lambda-powertools/metrics;
import type { Context } from 'aws-lambda';
const metrics = new Metrics({ namespace: 'my-app', serviceName: 'my-service' });
const app = new Router();
app.use(metricsMiddleware(metrics));
app.get('/users/:id', async ({ params }) => {
return { id: params.id, name: 'Jane' };
});
export const handler = async (event: unknown, context: Context) =>
app.resolve(event, context);Changes
- improv(parser): export InferOutput from public types entry point (#5175) by @yashar-new10
- chore(deps): add esbuild as explicit devDependency (#5173) by @sdangol
- chore: temporarily remove Bahrain (me-south-1) region from layer publishing (#5169) by @svozza
- docs(commons): fix isStrictEqual and areArraysEqual JSDoc array comparison description (#5165) by @Zelys-DFKH
- docs: fix dependencies & broken references (#5156) by @dreamorosi
- docs: fix markdown table format (#5153) by @dothomson
- style: remove useAwait linting rule (#5146) by @dreamorosi
- docs(event-handler): update custom middleware example to use Store API (#5145) by @svozza
- fix(commons): don't overwrite existing value with
undefinedin deepMerge (#5141) by @faberchri - fix(event-handler): http response body validation typings (#5125) by @nateiler
- feat(event-handler): add metrics middleware for HTTP routes (#5086) by @svozza
- fix: update middy types to be aligned with 7.1.2 update (#5100) by @willfarrell
- fix(commons): rename AvailabilityZoneId to AvailabilityZoneID in docs and tests (#5118) by @svozza
🔧 Maintenance
- chore(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (#5181) by @dependabot[bot]
- chore(deps-dev): bump typedoc from 0.28.18 to 0.28.19 in the typescript group across 1 directory (#5182) by @dependabot[bot]
- chore(deps): bump actions/github-script from 8.0.0 to 9.0.0 (#5177) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.1.1 to 7.2.0 (#5178) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.10 to 2.4.11 (#5179) by @dependabot[bot]
- chore(deps): bump @types/node from 25.5.2 to 25.6.0 (#5180) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 6.0.0 to 6.1.0 (#5170) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5176) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5171) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 8.0.0 to 8.0.1 (#5164) by @dependabot[bot]
- chore(deps-dev): bump typedoc-plugin-missing-exports from 4.1.2 to 4.1.3 in the typescript group across 1 directory (#5163) by @dependabot[bot]
- chore(deps): bump @types/node from 25.5.0 to 25.5.2 (#5161) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.5 to 0.28.0 (#5160) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.4 to 0.27.5 (#5159) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.3.0 to 2.3.1 (#5158) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.9 to 2.4.10 (#5152) by @dependabot[bot]
- chore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs (#5150) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 5.0.3 to 5.0.4 (#5149) by @dependabot[bot]
- chore(deps): bump actions/setup-go from 6.3.0 to 6.4.0 (#5148) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.35.0 to 4.35.1 (#5147) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5140) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.34.1 to 4.35.0 (#5139) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.8 to 2.4.9 (#5136) by @dependabot[bot]
- chore(deps): bump the typescript group across 1 directory with 2 updates (#5134) by @dependabot[bot]
- chore(deps): bump requests from 2.32.4 to 2.33.0 in /docs (#5137) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#5132) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5135) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.2.7 to 2.3.0 (#5123) by @dependabot[bot]
- chore(deps): bump constructs from 10.5.1 to 10.6.0 (#5129) by @dependabot[bot]
- chore(deps-dev): bump markdownlint-cli2 from 0.21.0 to 0.22.0 (#5130) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.34.0 to 4.34.1 (#5127) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.5 to 9.7.6 in /docs (#5122) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 61 updates (#5131) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 5.0.2 to 5.0.3 (#5121) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.33.0 to 4.34.0 (#5120) by @dependabot[bot]
- chore(deps): bump squidfunk/mkdocs-material from
c373999to868ad4din /docs (#5119) by @dependabot[bot] - chore(deps-dev): bump @biomejs/biome from 2.4.7 to 2.4.8 (#5115) by @dependabot[bot]
- chore(deps): bump valibot from 1.3.0 to 1.3.1 (#5116) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.1.0 to 7.1.1 (#5114) by @dependabot[bot]
This release was made possible by the following contributors:
@Zelys-DFKH, @dependabot[bot], @dothomson, @dreamorosi, @faberchri, @github-actions[bot], @nateiler, @sdangol, @svozza, @willfarrell, @yashar-new10, dependabot[bot] and github-actions[bot]
v2.32.0
Summary
In this release, we are pleased to announce a new utility for interacting with the Lambda Metadata Service in the commons package, allowing you to easily retrieve information about the Lambda function, such as the Availability Zone ID.
In the HTTP event handler, we have delivered two much requested features: a type-safe Store API, letting you share state between middleware and route handlers with full type safety, and request and response validation, so you can enforce data contracts at your API boundary, eliminating manual parsing and type assertion code.
We've also fixed a bug where the Kafka consumer would throw when processing tombstone events with undefined values.
⭐ Congratulations to @haslers for their first PR merged in the project 🎉
Lambda Metadata Service
A new getMetadata() utility in the commons package fetches metadata from the AWS Lambda Metadata endpoint. The utility automatically returns an empty object outside of Lambda, so your code works seamlessly in local development and testing.
import { getMetadata } from '@aws-lambda-powertools/commons/utils/metadata';
import { Logger } from '@aws-lambda-powertools/logger';
const logger = new Logger({ serviceName: 'serverlessAirline' });
const metadata = await getMetadata();
export const handler = async () => {
const { AvailabilityZoneID: azId } = metadata;
logger.appendKeys({ azId });
};Type-safe Store API
The HTTP event handler now includes a Store API that provides type-safe, scoped state management for route handlers with two built-in storage scopes:
- Request store — per-invocation state (set in middleware, read in handlers). Cleared automatically between requests.
- Shared store — router-scoped state (set at cold start, read everywhere). Persists across invocations.
import { Router } from '@aws-lambda-powertools/event-handler/http';
import type { Context } from 'aws-lambda';
type AppEnv = {
store: {
request: { userId: string; isAdmin: boolean };
shared: { db: { query: (sql: string) => Promise<unknown> } };
};
};
const app = new Router<AppEnv>();
app.shared.set('db', createDbClient());
app.use(async ({ reqCtx, next }) => {
const auth = reqCtx.req.headers.get('Authorization') ?? '';
const { sub, isAdmin } = jwt.verify(auth.replace('Bearer ', ''), 'secret');
reqCtx.set('userId', sub);
reqCtx.set('isAdmin', isAdmin);
await next();
});
app.get('/profile', async (reqCtx) => {
const userId = reqCtx.get('userId'); // typed as string
const db = reqCtx.shared.get('db'); // typed as { query: ... }
if (!userId || !db) return { error: 'not ready' };
return { userId };
});
export const handler = async (event: unknown, context: Context) =>
app.resolve(event, context);Validation Middleware
The new validation feature validates validates request and response data against Standard Schema v1 schemas — a vendor-neutral interface supported by Zod, Valibot, ArkType, and other popular libraries.
You can validate any combination of request body, headers, path parameters, and query parameters. Request validation errors return a structured 422 Unprocessable Entity response, and response validation errors return 500 Internal Server Error. TypeScript infers the handler's context type from your schema config — only validated fields are accessible, catching mismatches at compile time.
import { Router } from '@aws-lambda-powertools/event-handler/http';
import type { Context } from 'aws-lambda';
import { z } from 'zod';
const app = new Router();
const createTodoSchema = z.object({ title: z.string() });
const todoResponseSchema = z.object({
id: z.string(),
title: z.string(),
completed: z.boolean(),
});
app.post(
'/todos',
(reqCtx) => {
const { title } = reqCtx.valid.req.body; // fully typed
return { id: '123', title, completed: false };
},
{
validation: {
req: { body: createTodoSchema },
res: { body: todoResponseSchema }, // runtime check on the response
},
}
);
export const handler = async (event: unknown, context: Context) =>
app.resolve(event, context);Changes
- fix(commons): rename AvailabilityZoneId to AvailabilityZoneID in docs and tests (#5118) by @svozza
- chore(ci): temporarily disable me-central-1 deployments (#5111) by @svozza
- feat(commons): add Lambda Metadata Service support (#5109) by @svozza
- revert: feat(commons): add Lambda Metadata Service support (#5106) (#5107) by @svozza
- feat(commons): add Lambda Metadata Service support (#5106) by @svozza
- feat(event-handler): add type-safe Store API for request and shared state (#5081) by @svozza
- chore(deps): regenerate package-lock.json to clear stale Dependabot alerts (#5075) by @dreamorosi
- fix(event-handler): add overloads to route() for typed validation context (#5052) by @svozza
- chore: run linting on packages, run npm audit fix manually, address SonarCloud (#5046) by @dreamorosi
- fix(event-handler): default error handler returns a web Response correctly (#5024) by @nateiler
- fix(kafka): handle tombstone events without value (#5017) by @haslers
- ci: use ts extension in layer CDK stack imports (#5010) by @svozza
- ci: fix layer import in CDK stack (#5009) by @dreamorosi
📜 Documentation updates
🔧 Maintenance
- chore(deps-dev): bump @biomejs/biome from 2.4.7 to 2.4.8 (#5115) by @dependabot[bot]
- chore(deps): bump valibot from 1.3.0 to 1.3.1 (#5116) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.1.0 to 7.1.1 (#5114) by @dependabot[bot]
- chore(deps): bump valibot from 1.2.0 to 1.3.0 (#5101) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.6 to 2.4.7 (#5097) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 7.0.0 to 7.1.0 (#5104) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 6.4.0 to 7.0.0 (#5095) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#5099) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 102 updates (#5098) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 16.3.3 to 16.4.0 (#5096) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.32.6 to 4.33.0 (#5094) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 5.0.1 to 5.0.2 (#5093) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#5088) by @dependabot[bot]
- chore(deps): bump @types/node from 25.4.0 to 25.5.0 (#5091) by @dependabot[bot]
- chore(deps): bump @aws/lambda-invoke-store from 0.2.3 to 0.2.4 (#5089) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.3 to 0.27.4 (#5090) by @dependabot[bot]
- chore(deps): bump actions/download-artifact from 8.0.0 to 8.0.1 (#5087) by @dependabot[bot]
- chore(deps-dev): bump @aws/durable-execution-sdk-js from 1.0.2 to 1.1.0 (#5085) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.4 to 9.7.5 in /docs (#5084) by @dependabot[bot]
- chore(deps): bump squidfunk/mkdocs-material from
f4332a8toc373999in /docs (#5083) by @dependabot[bot] - chore(deps-dev): bump lint-staged from 16.3.2 to 16.3.3 (#5080) by @dependabot[bot]
- chore(deps): bump @types/node from 25.3.5 to 25.4.0 (#5079) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 2 updates (#5078) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 6.3.0 to 6.4.0 (#5076) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 115 updates (#5077) by @dependabot[bot]
- chore(deps): bump @types/node from 25.3.3 to 25.3.5 (#5071) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.4.5 to 2.4.6 (#5070) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 6.2.0 to 6.3.0 (#5069) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.32.5 to 4.32.6 (#5068) by @dependabot[bot]
- chore(deps): bump markdown from 3.7 to 3.8.1 in /docs (#5067) by @dependabot[bot]
- chore(deps): bump arktype from 2.1.29 to 2.2.0 (#5066) by @dependabot[bot]
- chore(deps-dev): bump lint-staged from 16.3.1 to 16.3.2 (#5065) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.3 to 9.7.4 in /docs (#5064) by @dependabot[bot]
- chore(deps): bump actions/setup-node from 6.2...
v2.31.0
Summary
In this release we are pleased to announce Tracer middleware for the HTTP event handler, which allows users to enable distributed tracing for their HTTP routes with minimal boilerplate code.
In addition, the metric utility now supports a fluent interface, allowing you to chain multiple methods in a single statement.
We have also fixed a bug in the HTTP event handler that caused parameterized headers to be handled incorrectly.
⭐ Special thanks to @nateiler and @dothomson for their first PR merged in the project, and to @arnabrahman! for another great contribution 🎉
Tracer Middleware
You can now use the Tracer utility with the HTTP event handler to gain observability over your routes. The middleware:
- Creates a subsegment for each HTTP route with the format
METHOD /path(e.g.,GET /users) - Adds
ColdStartandServiceannotations - Optionally captures JSON response bodies as metadata
- Captures errors as metadata when exceptions occur
import { Router } from '@aws-lambda-powertools/event-handler/http';
import { tracer as tracerMiddleware } from '@aws-lambda-powertools/event-handler/http/middleware/tracer';
import { Tracer } from '@aws-lambda-powertools/tracer';
import type { Context } from 'aws-lambda';
const tracer = new Tracer({ serviceName: 'my-api' });
const app = new Router();
app.get(
'/users/cards',
[tracerMiddleware(tracer, { captureResponse: false })],
({ params }) => {
return { id: params.id, secret: 'sensitive-data' };
}
);
export const handler = async (event: unknown, context: Context) =>
app.resolve(event, context);Metrics Fluent Interface
All mutation methods (with the exception of clear*) now return the metric instance that was mutated, allowing you to chain multiple metrics operations in a single statement.
import { Metrics} from '@aws-lambda-powertools/metrics';
const metrics = new Metrics();
metrics
.addDimension('environment', 'prod')
.addDimension('commit', '1234')
.addMetric('test1', MetricUnit.Count, 1);
.addMetric('test2', MetricUnit.Count, 1);Changes
- ci: use ts extension in layer CDK stack imports (#5010) by @svozza
- ci: fix layer import in CDK stack (#5009) by @dreamorosi
- fix(event-handler): handle set-cookie header values with multiple attributes (#4990) by @nateiler
- chore: manually upgrade dependency tree (#5002) by @dreamorosi
- ci: switch npm auth to OIDC (#4997) by @dreamorosi
- fix(kafka): handle tombstone events (#4991) by @dreamorosi
- test: extract DF idempotency e2e tests (#4994) by @dreamorosi
- ci: remove workflow-based PR automation (#4996) by @dreamorosi
- chore(ci): update layer script to include event-handler (#4956) by @svozza
- feat(metrics): return metrics instance from metrics functions (#4930) by @dothomson
- feat(parameters): pass underlying SDK error as cause to
GetParameterError(#4936) by @felsidian
📜 Documentation updates
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4985) by @dependabot[bot]
- feat(event-handler): add tracer middleware for HTTP routes (#4982) by @arnabrahman
- chore(deps): bump @types/node from 25.1.0 to 25.2.0 (#4983) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 49 updates (#4984) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.10 to 25.1.0 (#4980) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 43 updates (#4975) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4976) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4959) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.9 to 25.0.10 (#4968) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 93 updates (#4958) by @dependabot[bot]
- chore(deps): bump @types/aws-lambda from 8.10.159 to 8.10.160 (#4963) by @dependabot[bot]
- chore(deps): bump constructs from 10.4.4 to 10.4.5 (#4957) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.8 to 25.0.9 (#4954) by @dependabot[bot]
- docs(event-handler): add http router decorator examples (#4950) by @matthew2564
- chore(deps): bump @types/node from 25.0.6 to 25.0.8 (#4952) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4947) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.3 to 25.0.6 (#4945) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 62 updates (#4946) by @dependabot[bot]
- improv(docs): fixed the extra dependencies table (#4940) by @sdangol
🔧 Maintenance
- chore(deps-dev): bump @valkey/valkey-glide from 2.2.6 to 2.2.7 (#5006) by @dependabot[bot]
- chore(deps): bump @types/node from 25.2.0 to 25.2.2 (#5004) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.32.1 to 4.32.2 (#4998) by @dependabot[bot]
- chore(deps): bump @types/node from 25.2.0 to 25.2.1 (#4999) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4985) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.32.0 to 4.32.1 (#4987) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 5.1.1 to 6.0.0 (#4992) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.3.13 to 2.3.14 (#4989) by @dependabot[bot]
- feat(event-handler): add tracer middleware for HTTP routes (#4982) by @arnabrahman
- chore(deps): bump @types/node from 25.1.0 to 25.2.0 (#4983) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 49 updates (#4984) by @dependabot[bot]
- test: add e2e tests for batch processing (#4978) by @dreamorosi
- test(idempotency): add Durable function e2e test case (#4979) by @dreamorosi
- chore(deps): bump @types/node from 25.0.10 to 25.1.0 (#4980) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.3.11 to 2.3.13 (#4974) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 43 updates (#4975) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.31.10 to 4.32.0 (#4977) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4976) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#4970) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4959) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.9 to 25.0.10 (#4968) by @dependabot[bot]
- chore(deps): bump actions/setup-python from 6.1.0 to 6.2.0 (#4967) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 6.1.1 to 6.2.0 (#4966) by @dependabot[bot]
- chore(deps): bump actions/checkout from 6.0.1 to 6.0.2 (#4969) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 93 updates (#4958) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.3.5 to 4.3.6 (#4971) by @dependabot[bot]
- chore(deps): bump @types/aws-lambda from 8.10.159 to 8.10.160 (#4963) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.2.5 to 2.2.6 (#4962) by @dependabot[bot]
- chore(deps): bump release-drafter/release-drafter from 6.1.0 to 6.1.1 (#4961) by @dependabot[bot]
- chore(deps): bump constructs from 10.4.4 to 10.4.5 (#4957) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.8 to 25.0.9 (#4954) by @dependabot[bot]
- chore(deps): bump actions/setup-node from 6.1.0 to 6.2.0 (#4953) by @dependabot[bot]
- chore(deps): bump actions/setup-go from 6.1.0 to 6.2.0 (#4948) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.6 to 25.0.8 (#4952) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4947) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.2.1 to 2.2.5 (#4944) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updat...
v2.30.2
Summary
In this release we have added Middy v7 middleware compatibility which enables developers using Middy to use Durable functions, Tenant isolation mode, and multi-concurrency on Lambda Managed Instances.
We have also now added a new tenantId property by default for tenant identification in all log entries, making it easier to filter and trace logs across different tenants in your Lambda functions.
⭐ Special thanks to @coderbyheart for their first PR merged in the project 🎉
Changes
- feat: allow @middy/core v7 (#4918) by @coderbyheart
- feat(logger): add tenantId to logger default properties (#4931) by @kawaaaas
- improv(ci): Added environment suffix to prevent artefact name conflict (#4921) by @sdangol
📜 Documentation updates
- chore(deps): bump urllib3 from 2.6.0 to 2.6.3 in /docs (#4927) by @dependabot[bot]
- improv(docs): added a note for customers migrating from
BatchProcessorSynctoBatchProcessor(#4926) by @sdangol - improv(docs): updated the Maintainer's Playbook with the updated CI process (#4922) by @sdangol
🔧 Maintenance
- chore(batch): remove invoke store global namespace workaround (#4932) by @svozza
- chore(deps): bump urllib3 from 2.6.0 to 2.6.3 in /docs (#4927) by @dependabot[bot]
- feat: remove baseUrl from TypeScript configurations for future compiler compatibility (#4925) by @dreamorosi
- improv(docs): updated the Maintainer's Playbook with the updated CI process (#4922) by @sdangol
This release was made possible by the following contributors:
@coderbyheart, @dependabot[bot], @dreamorosi, @github-actions[bot], @kawaaaas, @sdangol, @svozza, dependabot[bot] and github-actions[bot]
v2.30.1
Summary
In this release we have removed lodash.merge , allowing users to simplify their bundling process as special handling of this CommonJS only dependency is no longer required.
⭐ Special thanks to @jaimellamasi for their work on the lodash migration! 🎉
Changes
- improv(ci): Added environment suffix to prevent artefact name conflict (#4921) by @sdangol
- fix(logger): improve e2e test resilience by grouping logs by level (#4909) by @dreamorosi
- chore(ci): prevent parameter injection in make-version workflow (#4900) by @dreamorosi
- chore(ci): harden workflow permissions for security compliance (#4898) by @dreamorosi
- improv(ci): fixed the Make Release workflow (#4867) by @sdangol
- improv(ci): automated the Gamma/Prod deployment to China/GovCloud regions (#4864) by @sdangol
📜 Documentation updates
- improv(docs): updated the Maintainer's Playbook with the updated CI process (#4922) by @sdangol
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 27 updates (#4912) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 2 updates (#4913) by @dependabot[bot]
- chore(maintenance): general refactoring (#4905) by @dreamorosi
- chore(maintenance): remove cloud dev environment configurations (#4896) by @dreamorosi
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 92 updates (#4893) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4894) by @dependabot[bot]
- chore(deps): bump squidfunk/mkdocs-material from
980e11fto3bba0a9in /docs (#4888) by @dependabot[bot] - chore(deps): bump @types/node from 25.0.2 to 25.0.3 (#4885) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs (#4889) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.1 to 0.27.2 (#4884) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 10.10.2 to 10.16.1 in /docs (#4881) by @dependabot[bot]
- docs: add EF Education First as customer reference (#4877) by @dreamorosi
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4875) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.1 to 25.0.2 (#4872) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 30 updates (#4874) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.0 to 25.0.1 (#4866) by @dependabot[bot]
- chore(deps): bump @types/node from 24.10.2 to 25.0.0 (#4863) by @dependabot[bot]
- chore(deps): bump constructs from 10.4.3 to 10.4.4 (#4862) by @dependabot[bot]
- chore(ci): bumped the layer verison from 41 to 42 (#4861) by @sdangol
🔧 Maintenance
- improv(docs): updated the Maintainer's Playbook with the updated CI process (#4922) by @sdangol
- refactor(logger): replace lodash.merge with internal deepMerge utility (#4892) by @jaimellamasi
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 27 updates (#4912) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 2 updates (#4913) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.3.10 to 2.3.11 (#4911) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.3.4 to 4.3.5 (#4910) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.2.1 to 4.3.4 (#4903) by @dependabot[bot]
- chore(maintenance): remove cloud dev environment configurations (#4896) by @dreamorosi
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 92 updates (#4893) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4894) by @dependabot[bot]
- chore(deps-dev): bump protobufjs from 7.5.4 to 8.0.0 (#4886) by @dependabot[bot]
- chore(deps): bump squidfunk/mkdocs-material from
980e11fto3bba0a9in /docs (#4888) by @dependabot[bot] - chore(deps-dev): bump @biomejs/biome from 2.3.9 to 2.3.10 (#4890) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.31.8 to 4.31.9 (#4882) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.2 to 25.0.3 (#4885) by @dependabot[bot]
- chore(deps): bump mkdocs-material from 9.7.0 to 9.7.1 in /docs (#4889) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.1 to 0.27.2 (#4884) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#4883) by @dependabot[bot]
- chore(deps): bump pymdown-extensions from 10.10.2 to 10.16.1 in /docs (#4881) by @dependabot[bot]
- chore(deps): bump @standard-schema/spec from 1.0.0 to 1.1.0 (#4880) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.3.8 to 2.3.9 (#4879) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.2.0 to 4.2.1 (#4878) by @dependabot[bot]
- docs: add EF Education First as customer reference (#4877) by @dreamorosi
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4875) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.1 to 25.0.2 (#4872) by @dependabot[bot]
- chore(deps): bump arktype from 2.1.28 to 2.1.29 (#4871) by @dependabot[bot]
- chore(deps): bump zgosalvez/github-actions-ensure-sha-pinned-actions from 4.0.0 to 4.0.1 (#4870) by @dependabot[bot]
- chore(deps): bump actions/download-artifact from 6.0.0 to 7.0.0 (#4869) by @dependabot[bot]
- chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#4868) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.1.13 to 4.2.0 (#4873) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 30 updates (#4874) by @dependabot[bot]
- chore(deps): bump @types/node from 25.0.0 to 25.0.1 (#4866) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.31.7 to 4.31.8 (#4865) by @dependabot[bot]
- chore(deps): bump @types/node from 24.10.2 to 25.0.0 (#4863) by @dependabot[bot]
- chore(deps): bump constructs from 10.4.3 to 10.4.4 (#4862) by @dependabot[bot]
This release was made possible by the following contributors:
@dependabot[bot], @dreamorosi, @github-actions[bot], @jaimellamasi, @sdangol, dependabot[bot] and github-actions[bot]
v2.30.0
Summary
We're excited to announce AWS Lambda durable function support in Powertools for AWS Lambda TypeScript. This allows you to leverage AWS Lambda's new durable execution capabilities while taking the advantage of features such as maintaining idempotency guarantees, making it easier to build reliable serverless workflows that span multiple invocations.
AWS Lambda durable functions allow you to simplify building multi-step applications and AI workflows. These functions automatically checkpoint progress, suspend execution for up to one year during long-running tasks, and recover from failures without the need to manage additional infrastructure.
Note
Lambda function handlers using MiddyJS or Class method decorators aren’t compatible with Durable Function handlers at this time.
Tracking issues: MiddyJS middyjs/middy#1531
Class Decorator #4832
This release also includes some bug fixes and a documentation improvement with the help of the community.
⭐ Congratulations to @jinxiao and @dwandro for their first PR merged in the project 🎉
Changes
- fix(logger): merged temp keys with same keys when appending to the logger (#4840) by @sdangol
- fix(idempotency): Update durableExecutionMode string (#4837) by @ConnorKirk
- feat(idempotency): Allow durable function to replay (#4834) by @ConnorKirk
- fix(event-handler): threshold limit for compression not respected when content-length not set (#4827) by @svozza
- feat(parser): fix DynamoDBStreamChangeRecordSchema.dynamodb type (#4817) by @benthorner
📜 Documentation updates
- chore(ci): bumped the layer verison from 41 to 42 (#4861) by @sdangol
- chore(deps-dev): bump markdownlint-cli2 from 0.19.1 to 0.20.0 (#4853) by @dependabot[bot]
- chore(deps): bump aws-cdk-lib from 2.228.0 to 2.232.1 in the aws-cdk group across 1 directory (#4855) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 42 updates (#4854) by @dependabot[bot]
- chore(deps): bump @types/node from 24.10.1 to 24.10.2 (#4856) by @dependabot[bot]
- chore(deps): bump urllib3 from 2.5.0 to 2.6.0 in /docs (#4850) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.0 to 0.27.1 (#4849) by @dependabot[bot]
- chore(deps): bump tsx from 4.20.6 to 4.21.0 (#4829) by @dependabot[bot]
- docs(parser): fixed a typo for the SqsEnvelope built-in envelope (#4826) by @sdangol
- fix: fix China region arn typo (#4820) by @jinxiao
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 56 updates (#4811) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4812) by @dependabot[bot]
- chore(ci): bumped the layer verison from 40 to 41 (#4800) by @sdangol
🔧 Maintenance
- chore(deps-dev): bump aws-sdk from 2.1692.0 to 2.1693.0 (#4857) by @dependabot[bot]
- chore(deps-dev): bump markdownlint-cli2 from 0.19.1 to 0.20.0 (#4853) by @dependabot[bot]
- chore(deps): bump aws-cdk-lib from 2.228.0 to 2.232.1 in the aws-cdk group across 1 directory (#4855) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 42 updates (#4854) by @dependabot[bot]
- chore(deps): bump @types/node from 24.10.1 to 24.10.2 (#4856) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.31.6 to 4.31.7 (#4852) by @dependabot[bot]
- chore(deps): bump urllib3 from 2.5.0 to 2.6.0 in /docs (#4850) by @dependabot[bot]
- chore(deps): bump @aws/lambda-invoke-store from 0.2.1 to 0.2.2 (#4847) by @dependabot[bot]
- chore(deps): bump esbuild from 0.27.0 to 0.27.1 (#4849) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.2.0 to 2.2.1 (#4848) by @dependabot[bot]
- chore(deps): bump arktype from 2.1.27 to 2.1.28 (#4845) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#4844) by @dependabot[bot]
- chore(deps): bump actions/stale from 10.1.0 to 10.1.1 (#4843) by @dependabot[bot]
- chore(deps): bump actions/setup-node from 6.0.0 to 6.1.0 (#4842) by @dependabot[bot]
- chore(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#4841) by @dependabot[bot]
- chore(deps): update package lock file for invoke store (#4836) by @svozza
- fix(deps): revert @aws/lambda-invoke-store to dependency (#4833) by @dwandro
- chore(deps): bump github/codeql-action from 4.31.5 to 4.31.6 (#4830) by @dependabot[bot]
- chore(deps): bump tsx from 4.20.6 to 4.21.0 (#4829) by @dependabot[bot]
- chore(deps-dev): bump typedoc from 0.28.14 to 0.28.15 in the typescript group across 1 directory (#4828) by @dependabot[bot]
- chore(deps-dev): bump @valkey/valkey-glide from 2.1.2 to 2.2.0 (#4825) by @dependabot[bot]
- chore(deps-dev): bump @biomejs/biome from 2.3.7 to 2.3.8 (#4824) by @dependabot[bot]
- chore(deps): bump vscode/devcontainers/javascript-node from
fd373e0to88852e0in /.devcontainer (#4823) by @dependabot[bot] - chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#4818) by @dependabot[bot]
- chore(deps): bump aws-actions/configure-aws-credentials from 5.1.0 to 5.1.1 (#4814) by @dependabot[bot]
- chore(deps): bump actions/setup-python from 6.0.0 to 6.1.0 (#4815) by @dependabot[bot]
- chore(deps): bump valibot from 1.1.0 to 1.2.0 (#4816) by @dependabot[bot]
- chore(deps): bump the aws-sdk-v3 group across 1 directory with 56 updates (#4811) by @dependabot[bot]
- chore(deps): bump the aws-cdk group across 1 directory with 3 updates (#4812) by @dependabot[bot]
- chore(deps): bump github/codeql-action from 4.31.4 to 4.31.5 (#4813) by @dependabot[bot]
- chore(deps-dev): bump markdownlint-cli2 from 0.19.0 to 0.19.1 (#4810) by @dependabot[bot]
- chore(deps-dev): bump zod from 4.1.12 to 4.1.13 (#4809) by @dependabot[bot]
- chore(deps-dev): bump the vitest group across 1 directory with 2 updates (#4808) by @dependabot[bot]
- chore(event-handler): export types for event handler middleware (#4807) by @svozza
- chore(deps-dev): bump @biomejs/biome from 2.3.5 to 2.3.7 (#4791) by @dependabot[bot]
This release was made possible by the following contributors:
@ConnorKirk, @benthorner, @dependabot[bot], @dwandro, @github-actions[bot], @jinxiao, @sdangol, @svozza, dependabot[bot] and github-actions[bot]