What's Changed
New Contributors
- @michael-denyer made their first contribution in #640
[1.3.39] — 2026-05-15
Added
- Node.js Lambda —
@aws-sdk/client-*built-in stubs — real Node.js 18+ Lambda ships the AWS SDK v3 built-in; MiniStack's worker now interceptsrequire('@aws-sdk/client-*')and returns lightweight stubs that route throughAWS_ENDPOINT_URLwhen the real package isn't installed (Lambda Layers still win).@aws-sdk/client-lambdagets a REST stub; 28awsJson1.xservices resolve via a genericX-Amz-TargetProxy.err.name/err.codeset per v3 catch-by-name convention. HTTPS→HTTP localhost downgrade extended to CDK Provider Framework'scfn-response.jsPUT. Query-protocol / REST-XML / REST-path clients still need bundling or a Layer, as on real AWS outside a managed runtime. Contributed by @hiddengearz.
Fixed
- Cognito OIDC federation callback (
/oauth2/idpresponse) — OIDC federation was half-wired:/oauth2/authorizeredirected to the IdP correctly but routed the callback at/saml2/idpresponse, which only accepts SAML, so every IdPcode+statecallback 400'd. MiniStack now serves/oauth2/idpresponse: exchanges the code at the IdP'stoken_url, decodes theid_token(no signature verification — same posture as SAML), appliesAttributeMapping, provisions the{provider}_{sub}user, and 302s back to the app with a MiniStack-issued code. Reported by @ocr-lasagna. - Step Functions executions stalling at
ExecutionStartedunder non-default account IDs —_executionsis anAccountScopedDictkeyed byget_account_id()(aContextVar); the background worker was spawned via plainthreading.Threadwhich doesn't propagate contextvars, so the worker looked up the execution under the default account, found nothing, and silently returned. Fixed withcontextvars.copy_context().runon each thread target, with per-thread snapshots at the Parallel and Map spawn sites (a singleContextcannot be entered by two threads concurrently). Contributed by @michael-denyer. - Step Functions JSONata
Argumentsonaws-sdkTask states — Tasks withQueryLanguage: "JSONata"now evaluateArgumentsand success/CatchOutputagainst$states.input/$states.result/$states.errorOutput, instead of dispatching with an empty JSONPath payload. Contributed by @jayjanssen. - Step Functions JSONata coverage for Pass and Choice — Pass now evaluates
Output(previously silently ignored). Choice now evaluates per-branchCondition(previously always treated as falsy, falling through toDefault) and applies per-branchOutputon the matched rule. Evaluator extended with comparison/arithmetic/string-concat/and/or/in/not,$count/$length/$string/$number, paren grouping, unary minus, left-associative parsing. Reported by @youngkwangk.