Repository navigation
davidrs 0.1.0
The first public release.
Changed
- JWKS caches expire after one hour by default (
with_cache_ttlconfigures
this); expired keys require a successful refresh. Keys must include
kty: "RSA", and optional key usage fields must allow RS256 verification. - Getting-started instructions, architecture boundaries, gateway trust
requirements and agent guidance match the implementation. Performance
claims without a reproducible benchmark have been removed. - The guide, README and examples index now say when to read each chapter,
what a caller or Lambda should observe when a call works, and what to
change when it does not.
Fixed
- Tenant fallbacks must pass the caller's membership check.
- OpenAPI path arguments cannot form
.or..segments; mutating
operations advertise potentially destructive effects to MCP clients. - Unsupported critical JWT extensions are rejected. Failed or cancelled
JWKS requests enter the refresh cooldown and redact URLs from errors. - DynamoDB deadlines bound in-flight reads and batches. A zero item limit
sends no query, and large deadline margins expire safely. - Stream producers completing after their deadline report a timeout even
when the runtime's timer has not fired yet. - EMF serialization rejects non-finite metrics and field-name collisions
that would overwrite CloudWatch metadata or invalidate the document. - The table example scopes reads to the authenticated caller, reports
incomplete pages and uses DynamoDB Local without an AWS account.
Added
- Pipelines, one per trigger: buffered HTTP (
http::Api), streamed HTTP with
CORS and content negotiation (http::stream::StreamApi), SQS partial batches
(queue), EventBridge rules (event), schedules (schedule), direct
invocations (runtime) and response streams that own their producer
(streaming). - One absolute invocation deadline (
Deadline) shared by every stage, with a
margin kept before Lambda's own timeout. - Failures that keep their public message and internal detail apart;
the built-inPlainErrorsand RFC 9457ProblemErrorsrenderers use
a fixed message for every 5xx. - Extension points:
Policy,Admission,ErrorRenderer, response
finalizers and the streamed pipeline'spreparehook. - Access control by configuration:
http::access::Accessidentifies callers
from API Gateway authorizer claims or a verified bearer token, requires them
or not, selects tenants, applies permission rules and refuses with
configurable codes; handlers receive aGranttyped by those guarantees.
Behind an API Gateway authorizer,Claims::from_gateway_tokenand
Access::gateway_token_claimsread the verified token's claims with their
JSON types, without verifying it again. - Rate limiting: the
RateLimitedadmission with a pluggableCounter, a
DynamoDB fixed-window counter, and the IETFRateLimit-Policyand
RateLimitheader fields. - Partial responses pushed down to the data layer:
fieldsmasks,
Mask::stored,DynamoProjectionandsql_columns. - Request validation that reports every invalid field at once (
http::schema),
and Garde validation (validate). - MCP servers on Lambda (
mcp,mcp-openapi): tools written by hand or
generated from an OpenAPI document, with OAuth protected-resource metadata. - AWS helpers: SDK configuration from the Lambda environment; bounded DynamoDB
reads, batches and signed page tokens; EventBridge publishing with per-entry
outcomes; typed Secrets Manager reads that never echo a value. - Outbound HTTP with byte and time limits, RS256 / JWKS bearer-token
verification, bounded gzip, SHA-256 and in-process caches. - Telemetry: logs, CloudWatch EMF metrics and X-Ray traces through the
sandbox's agent. - Test support: synthetic invocations and requests for testing handlers.
Request::formforapplication/x-www-form-urlencodedbodies, and the
albfeature for Application Load Balancer events.- Handler errors of the non-HTTP triggers convert into
lambda_runtime's
Diagnostic(re-exported asruntime::Diagnostic), so a function chooses
theerrorTypea Step FunctionsRetryorCatchmatches; a
RuntimeErrorreports its variant. - Logs follow
AWS_LAMBDA_LOG_LEVELwhenRUST_LOGis unset, and
telemetry::logs::runtime_span_filterdrops the runtime's own invocation
span. - Streamed responses carry
Set-Cookieheaders in the stream's cookie list. - Rust 2024 edition; the minimum supported Rust is 1.94.1, checked in CI.